【问题标题】:Popen.communicate() returns (None, None) even if script print results即使脚本打印结果,Popen.communicate() 也会返回 (None, None)
【发布时间】:2015-01-12 15:03:44
【问题描述】:

我对 Popen.communicate() 有疑问。

我有返回字符串的脚本。

然后我编写了第二个使用该变量的脚本。

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

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

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

【问题讨论】:

  • 如果您打算使用标准输出将来自myscript 的结果传送回您的Python 脚本,您不需要myscript 将某些内容实际打印到STDOUT 吗?

标签: python shell


【解决方案1】:

来自docs

注意,如果你想向进程的标准输入发送数据,你需要用stdin=PIPE创建Popen对象。同样,要在结果元组中获取除 None 以外的任何内容,您也需要提供 stdout=PIPE 和/或 stderr=PIPE

因此,使用以下命令创建 Popen 对象:

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

【讨论】:

  • 谢谢!这是向前迈出的一步,但现在我得到的是空字符串-.-
  • 懒惰的答案没有指定在哪里添加stdout=PIPEstderr=PIPE
  • @N8TRO 同样的懒惰答案也在 Python 官方文档中给出!!
  • 不幸的是stdout=PIPE 阻止实时输出显示在屏幕上。两者兼得的最简单方法是什么?
猜你喜欢
  • 2019-12-12
  • 1970-01-01
  • 2021-05-26
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
相关资源
最近更新 更多