2016-09-26 71 views
0

我有一个守护进程运行的命令,获取和执行它:Python:子进程Popen需要加入吗?

subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

我从来没有对它做任何事之后,没有wait(),没有communicate()

是好一些呢?
或正在加入所需的过程?

有没有类似的东西threading.deamon=Truesubprocess.Popen

回答

0

既然你设置stdout=subprocess.PIPE, stderr=subprocess.PIPE,如果你想获得标准输出,你可以这样做:

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
for line in p.stdout: 
    # do something here 
    #... 

至于你说的cmd被作为守护程序执行,我觉得守护进程不应在运行这条路。由于一旦你的python进程出错,守护进程将退出,你的数据将丢失。

如果你通过subprocess.Popen()运行其他进程,比如mysql,linux comands等,那么可以这么做。但你应该知道过程状态(返回代码),你应该通过调用poll()wait()来检查过程的状态。有关更多信息,请参见docs of subproces.Popen

+0

我不希望stdout和不关心返回的代码,因为执行的命令会照顾到这一点。我只是想知道它是否需要等待()或流程失效? – ealeon

+0

@ealeon,如果你不关心输出或返回代码,在调用Popen之后,cmd将在后端运行,不需要调用wait(),如果存在,则进程不会失效没有发生任何其他错误。 –