Il sottoprocesso.METODO METODO
Il sottoprocesso.Il metodo esegui prende un elenco di argomenti. Quando viene chiamato il metodo, esegue il comando e attende che il processo finisca, restituendo un oggetto "completato" alla fine. L'oggetto "CompletedProcess" restituisce STDOUT, STDERR, argomenti originali utilizzati durante la chiamata del metodo e un codice di ritorno. STDOUT si riferisce al flusso di dati prodotto dal comando, mentre Stderr si riferisce a eventuali errori raccolti durante l'esecuzione del programma. Qualsiasi codice di ritorno diverso da zero (codice di uscita) significherebbe un errore con il comando eseguito nel sottoprocesso.METODO METODO.
Esempio 1: contenuto di output di un file di testo usando il sottoprocesso.METODO METODO
Il comando seguente emetterà il contenuto di un "dati.file txt ", supponendo che contenga una stringa" name = John ".
Sottoprocesso di importazioneL'esecuzione del codice sopra restituirà il seguente output:
nome = JohnIl primo elemento dell'argomento dell'elenco è il nome del comando da eseguire. Qualsiasi elemento nell'elenco che segue il primo elemento sono considerati opzioni o switch della riga di comando. È possibile utilizzare anche singoli trattini e doppi trattini per definire le opzioni. Ad esempio, per elencare file e cartelle in una directory, il codice sarebbe "sottoprocesso.Run (["LS", "-l"] ". Nella maggior parte di questi casi, è possibile considerare qualsiasi argomento separato nello spazio in un comando shell come singolo elemento nell'elenco fornito al sottoprocesso.METODO METODO.
Esempio 2: sopprimere l'output del sottoprocesso.METODO METODO
Per sopprimere l'output del sottoprocesso.METODO DI ESEGGIO, dovrai fornire “stdout = sottoprocess.Devnull "e" stderr = sottoprocesso.Devnull "come argomenti aggiuntivi.
Sottoprocesso di importazioneL'esecuzione del codice sopra produrrà il seguente output:
CompletedProcess (Args = ['Cat', 'Data.txt '], returncode = 0)Esempio 3: output di acquisizione del sottoprocesso.METODO METODO
Per catturare l'output del sottoprocesso.Metodo Esegui, usa un argomento aggiuntivo chiamato "Capture_Output = true".
Sottoprocesso di importazioneL'esecuzione del codice sopra produrrà il seguente output:
CompletedProcess (Args = ['Cat', 'Data.txt '], returncode = 0,È possibile accedere singolarmente ai valori STDOUT e STDERR utilizzando "Output.stdout "e" output.Metodi Stderr ". L'uscita viene prodotta come una sequenza di byte. Per ottenere una stringa come output, usa “Output.stdout.Decodifica ("UTF-8") ". Puoi anche fornire "testo = vero" come argomento extra al sottoprocesso.Esegui chiamata per ottenere l'output in formato stringa. Per ottenere il codice di stato di uscita, è possibile utilizzare l'output.Metodo di ritorno ”.
Esempio 4: sollevare l'eccezione sull'errore del comando eseguito dal sottoprocesso.METODO METODO
Per sollevare un'eccezione quando il comando esce con uno stato diverso da zero, usa l'argomento "Check = true".
Sottoprocesso di importazioneL'esecuzione del codice sopra produrrà il seguente output:
Raccolta chiamataprocesserror (retCode, processo.args,Esempio 5: passare una stringa al comando eseguito dal sottoprocesso.METODO METODO
È possibile passare una stringa al comando per essere eseguita dal sottoprocesso.Esegui metodo usando l'argomento "input = 'string'".
Sottoprocesso di importazioneL'esecuzione del codice sopra produrrà il seguente output:
CompletedProcess (args = ['cat'], returnCode = 0, stDout = 'Data.txt ', stderr = ")Come puoi vedere, il codice sopra passa "dati.txt ”come stringa e non come oggetto file. Per passare "dati.txt "come file, usa l'argomento" stdin ".
con aperto ("Dati.txt ") come f:L'esecuzione del codice sopra produrrà il seguente output:
CompletedProcess (args = ['cat'], returnCode = 0, stDout = 'name = John \ n', stderr = ")Esempio 6: eseguire il comando direttamente nella shell usando il sottoprocesso.METODO METODO
È possibile eseguire un comando direttamente in una shell "come è", invece di usare una stringa divisa nel comando principale e le opzioni che lo seguono. Per fare questo, devi passare "shell = true" come ulteriore argomento. Ciò è tuttavia scoraggiato dagli sviluppatori di Python in quanto l'uso di "shell = true" può portare a problemi di sicurezza. Puoi leggere di più sulle implicazioni di sicurezza da qui.
Sottoprocesso di importazioneL'esecuzione del codice sopra produrrà il seguente output:
nome = JohnConclusione
Il sottoprocesso.Esegui il metodo in Python è piuttosto potente, in quanto consente di eseguire comandi shell all'interno di Python stesso. Questo aiuta a limitare tutto il codice a Python stesso senza la necessità di avere un codice di script shell aggiuntivo in file separati. Può essere, tuttavia, piuttosto difficile tokenizzare correttamente i comandi della shell in un elenco di Python. Puoi usare lo "Shlex.Metodo split () "per tokenizzare i comandi di shell semplici, ma in comandi lunghi e complessi - in particolare quelli con simboli del tubo - Shlex non riesce a dividere correttamente il comando. In tali casi, il debug può essere un problema difficile. Puoi usare l'argomento "shell = true" per evitarlo, ma ci sono alcuni problemi di sicurezza associati a questa azione.