0

我正在执行一个模块 popen1.py 并使用 subprocess 模块调用 popen2.py,

但是没有显示 popen2.py 的输出..当我显示子进程 id 时,它正在显示..popen2.py 的输出将在哪里打印

称呼

child = subprocess.Popen(['python', 'popen2.py',"parm1='test'","parm='test1'"], shell=True,
                        stdin=subprocess.PIPE,
                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
4

2 回答 2

1

该过程完成后,您可以读取child.stdoutchild.stderr获取数据(因为您通过了subprocess.PIPE

或者,您可以使用oudata,errdata = child.communicate()which 将等待子进程完成,然后将其作为字符串输出。


从设计的角度来看,最好是导入。我将重构popen2.py如下:

#popen2.py
# ... stuff here
def run(*argv):
    #...

if __name__ == '__main__':
    import sys
    run(sys.argv[1:])

然后你可以在 popen1.py 中导入并运行 popen2.py:

#popen1.py
import popen2
popen2.run("parm1=test","parm=test1")
于 2012-10-23T14:57:42.823 回答
0

您可以使用 child.stdout/child.stdin 与进程通信:

child = subprocess.Popen(['python', 'popen2.py',"parm1='test'","parm='test1'"], shell=True,
                    stdin=subprocess.PIPE,
                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print child.stdout.readlines()
于 2012-10-23T15:04:42.837 回答