2010-05-14 19 views

risposta

65

A seconda di come si desidera lavorare con lo script sono disponibili due opzioni. Se vuoi che i comandi blocchino e non facciano nulla mentre è in esecuzione, puoi semplicemente usare subprocess.call.

#start and block until done 
subprocess.call([data["om_points"], ">", diz['d']+"/points.xml"]) 

Se si vuole fare le cose mentre è in esecuzione o cose di alimentazione in stdin, è possibile utilizzare communicate dopo la chiamata popen.

#start and process things, then wait 
p = subprocess.Popen([data["om_points"], ">", diz['d']+"/points.xml"]) 
print "Happens while running" 
p.communicate() #now wait plus that you can send commands to process 

Come indicato nella documentazione, wait può situazione di stallo, in modo da comunicare è consigliabile.

+0

Controlla i documenti su [subprocess.call] (http://docs.python.org/library/subprocess.html#convenience-functions) – thornomad

5

Quello che stai cercando è il metodo wait.

+0

Ma se digito:. om_points = os.popen (dati [ "om_points"] + "> "+ diz [ 'd'] +"/ points.xml", "w") attendere () ricevo questo errore: Traceback (chiamata più recente scorso): file "./model_job.py", la linea 77, in om_points = os.popen (dati [ "om_points"] + ">" + diz ['d'] + "/ points.xml", "w"). wait() AttributeError: l'oggetto 'file' non ha attributo 'wait' Qual è il problema? Grazie ancora. – michele

+9

Non hai cliccato sul link che ho fornito. 'wait' è un metodo della classe' subprocess'. –

+0

wait può deadlock se il processo scrive su stdout e nessuno lo legge – ansgri

5

È possibile utilizzare subprocess per raggiungere questo obiettivo.

import subprocess 

#This command could have multiple commands separated by a new line \n 
some_command = "export PATH=$PATH://server.sample.mo/app/bin \n customupload abc.txt" 

p = subprocess.Popen(some_command, stdout=subprocess.PIPE, shell=True) 

(output, err) = p.communicate() 

#This makes the wait possible 
p_status = p.wait() 

#This will give you the output of the command being executed 
print "Command output: " + output 
Problemi correlati