即使脚本打印结果,Popen.communicate()也会返回(None,None)

时间:2015-01-12 15:03:45

标签: python shell

我对Popen.communicate()有疑问。

我有返回字符串的脚本。

然后我写了第二个脚本来获取该变量。

v = "./myscript arg1 arg2"
com = subprocess.Popen(v, shell=True).communicate()
print com

com返回(无,无)。关键是我可以在第一个脚本里面打印结果, shell打印结果也是如此。我不能只将该打印分配给变量。

当然第一个脚本返回值,而不是打印它。

1 个答案:

答案 0 :(得分:9)

来自docs

  

请注意,如果要将数据发送到进程的stdin,则需要使用Popen创建stdin=PIPE对象。同样,要在结果元组中获取None以外的任何内容,您还需要提供stdout=PIPE和/或stderr=PIPE

因此,使用:

创建Popen对象
subprocess.Popen("./myscript arg1 arg2", shell=True,
                 stdout=subprocess.PIPE, stderr=subprocess.PIPE)