Python versione Bignami - Confronti
import subprocess
Lanciare un processo figlio
Modo completo:
p = subprocess.Popen( # Comando da eseguire (come stringa o come lista) args, # How to connect the child's stdin, stdout and stderr: # * None: eredita dal padre # * subprocess.PIPE: collega via pipe all'oggetto file corrispondente # p.stdin, p.stdout o p.stderr # * subprocess.STDOUT: valido solo per stderr, collega stderr alla stesso # modo di stdout # * un oggetto di tipo file: collega via pipe al file dato stdin=None, stdout=None, stderr=None, # Se è True, esegue il comando usando la shell shell=False, # Directory in cui eseguire il comando (se None, usa la directory corrente) cwd=None, # Variabili di ambiente per il comando (se None, usa l'ambiente corrente) env=None)
Modi rapidi:
res = subprocess.call(stessi parametri di Popen)esegue il comando e restituisce lo stato di uscita.subprocess.check_call(stessi parametri di Popen)esegue il comando e lancia CalledProcessError se lo stato di uscita non è zero.
Gli oggetti Popen
p.stdinfile corrispondente allo standard input del processop.stdoutfile corrispondente allo standard output del processop.stderrfile corrispondente allo standard error del processop.pidprocess id del processop.returncodestato di uscita del processo, o None se il processo non è ancora uscitop.poll()controlla se il processo è uscito; restituisce p.returncodep.wait()aspetta finché il processo non termina; restituisce p.returncodestdout, stderr = p.communicate(input=None)manda l'input al processo e ne legge lo standard output e standard error, finché il processo non finisce.
Esempi
from subprocess import * # Legge un file dalla rete tramite wget e lo stampa mettendo i numeri alle # righe p = Popen(['wget', '-O-', '-q', url], stdout=PIPE) for num, line in enumerate(p.stdout): print "%4d %s" % (num, line[:-1]) if p.wait() != 0: raise CalledProcessError