2011-09-28 15 views
7

Ho un semplice script Python per eseguire la suite di test sia in ambiente Windows che Linux. Ogni test scrive l'output in un file separato. Io uso la sottoprocessazione .Popen per eseguire il comando della shell in un ciclo.Sottoprocesso Python. Output in uscita e asincrono

Ogni shell di comando inizia così:

def system_execute(self, command, path, out_file): 
    params_list = command.split(' ') 
    file_path = os.path.join(path, out_file) 
    f = open(file_path, "w") 
    subprocess.Popen(params_list, stdout=f) 
    f.close() 

Funziona bene, ma lo script finisce il suo lavoro prima sono stati scritti tutti i file di output. In realtà, ottengo centinaia di file a dimensione zero e ci vuole del tempo per finire di scrivere output e chiudere le maniglie. Qualcuno potrebbe spiegare il motivo per cui funziona così strano, e c'è un modo sincrono per fare lo stesso lavoro?

Grazie

risposta

15

Prima f.close(), è necessario per il nostro wait() sottoprocesso.

def system_execute(self, command, path, out_file): 
    params_list = command.split(' ') 
    file_path = os.path.join(path, out_file) 
    f = open(file_path, "w") 
    sp = subprocess.Popen(params_list, stdout=f) 
    sp.wait() 
    f.close() 

o semplicemente

def system_execute(self, command, path, out_file): 
    params_list = command.split(' ') 
    file_path = os.path.join(path, out_file) 
    f = open(file_path, "w") 
    subprocess.call(params_list, stdout=f) 
    f.close() 

(o, per la gestione dei file più semplice,

[...] 
    with open(file_path, "w") as f: 
     subprocess.call(params_list, stdout=f) 
+0

Grazie, funziona –

Problemi correlati