On 09/09/2014 11:45 AM, Peter Otten wrote:
jarod...@libero.it wrote:

I want to use subprocess for run some programs But I need to be sure the
program end before continue with the other:

subprocess.call("ls")
cmd1 = i
p1 = subprocess.Popen(cmd1,shell=True,stdout=subprocess.PIPE)

while True:
if p1.poll() is None:
time.sleep(3)

pass
if p1.poll()==0:
print '#'
break
if p1.poll() is not None and p1.poll() != 0:
raise Exception('Error building Alignment using star with hg19
database')

This are not working. How can I do?
thanks in advance for the precious help
bw,

I don't understand why you would need this loop. Why don't you use
subprocess.call() and be done?


The OP is piping the process stdout so I assume he is going to read from it in place of the pass in his example. Since the subprocess is doing genome-wide sequence alignment (at least I guess so from the exception string) there will be lots of output, which would cause subprocess.call() to block.

Assuming that the posted code was indented correctly and was otherwise run as posted this could also be the answer to the original question: you have to keep on consuming data from the pipe or its buffer is going to fill up and block everyhing. With a simple pass statement you do not achieve anything that you can't do with call.

Wolfgang

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to