[Tutor] Understand subprocess poll

Wolfgang Maier wolfgang.maier at biologie.uni-freiburg.de
Tue Sep 9 15:05:11 CEST 2014


On 09/09/2014 11:45 AM, Peter Otten wrote:
> jarod_v6 at 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



More information about the Tutor mailing list