一、如下两段代码区别?python
child = subprocess.Popen(command)
child = subprocess.Popen(command, stderr=subprocess.STDOUT, # 表示子进程的标准错误 stdout=subprocess.PIPE # 表示须要程序标准输出 )
加上stdout参数,能够获取command命令执行的子进程的标准输出,这有利于监控子进程执行状况。shell
二、read为何会出现deadlock?windows
stdout.read出现死锁并阻塞的缘由:函数
解决办法:用communicate()代替.net
三、communicate的返回结果(out, err)都表明什么?3d
out, err = child.communicate()
communicate()函数有两个返回值,因此须要用两个变量来接收。out和err分别是标准输出内容和标准错误内容。code
四、subprocess.call和subprocess.Popen区别联系(参考Python Popen communicate() 和wait()使用上的区别)blog
当你对shell命令的输出不感兴趣,只但愿程序被运行,你能够典型的使用subprocess.call。若是你须要捕获命令的输出结果,那么你就须要使用subprocess.Popen。
在subprocess.call与Popen之间,存在一个很是大的区别。subprocess.call会封锁对响应的等待,而subprocess.Popen则不会。(能够理解为若是程或者子进程没有响应,.call不理它,继续执行python语句,而Popen会等待,直到子进程输出结果才执行下一步语句)进程
五、python和pythonw区别联系get
若是不想看到控制台,就用pythonw.exe来运行py,或者将.py改成.pyw。
这里咱们遇到了一个问题就是:不能正常的运行pythonw
解决办法:在pyw文件中添加如下代码
import sys, os if sys.executable.endswith("pythonw.exe"): sys.stdout = open(os.devnull, "w"); sys.stderr = open(os.path.join(os.getenv("TEMP"), "stderr-"+os.path.basename(sys.argv[0])), "w")
六、child.poll()一直输出none?
开启的child子程序的问题,检查子程序是否正常便可。
七、popen(command,stderr,stdout)几个参数都表明了什么?
见问题一