[Tutor] Question about subprocess

Steven D'Aprano steve at pearwood.info
Sat Jan 11 06:51:09 CET 2014


On Sat, Jan 11, 2014 at 12:48:13PM +0800, daedae11 wrote:
> p = subprocess.Popen(['E:/EntTools/360EntSignHelper.exe', 'E:/build/temp/RemoteAssistSetup.exe'],
>                          stdout=subprocess.PIPE, shell=True).stdout
> temp = p.readline();
> print temp
> p.close()
> 
> When I run the above code in command line, it works formally.

What do you mean, "the above code"? Do you mean the *Python* code? Or do 
you mean calling the 360EntSignHelper.exe application from the command 
line? I'm going to assume you mean calling the .exe.


> However, when I writed it into a .py file and execute the .py file, it blocked at "temp=p.readline()".

Of course it does. You haven't actually called the .exe file, all you 
have done is created a Popen instance and then grabbed a reference to 
it's stdout. Then you sit and wait for stdout to contain data, which it 
never does.

Instead, you can do this:

p = subprocess.Popen(['E:/EntTools/360EntSignHelper.exe', 
                      'E:/build/temp/RemoteAssistSetup.exe'],
                       stdout=subprocess.PIPE, shell=True)
output = p.communicate()[0]
print output


I think that should do what you expect.


-- 
Steven


More information about the Tutor mailing list