【问题标题】:how to make subprocess.Popen retrieve the entire stdout?如何让 subprocess.Popen 检索整个标准输出?
【发布时间】:2016-05-15 16:42:24
【问题描述】:

代码如下(在 python 2.7 提示符下)

import subprocess as sp

a = sp.Popen(['bash', '-c', 'ssh [REDACTED] cat text.txt'],
             stdout=sp.PIPE, stderr=sp.PIPE)    
print(a.communicate()[0])

我希望这个程序打印整个“text.txt”文件,但是它缺少最后几行。

文件 text.txt 位于远程服务器中,我认为这是它的要点。如果我检索文件然后在本地执行 subprocess.Popen,它会按预期工作。

为什么会发生,我该如何解决?

注意:如果我使用 check_output 结果是一样的

【问题讨论】:

  • 如果您在本地运行该 ssh 命令,您会得到完整的文件,还是缺少最后几行?
  • 我得到了完整的文件。远程服务器可能正在做一些有趣的事情并且没有以某种方式通过标准输出发送所有内容?
  • 如果你运行:print(repr(subprocess.check_output(shlex.split('ssh <host> "cat text.txt"'))))会发生什么?

标签: python subprocess


【解决方案1】:

根据documentation for communicate,如果数据量很大,则不应使用该命令。试试this 之类的方法,看看是否能解决您的问题。

【讨论】:

  • 没解决,大小应该不会很大(起码txt本身不会很大)
  • 如果您将text.txt 存储在本地,然后将您的ssh 命令只替换为cat text.txt,会发生什么情况?
  • @amiller27: update your question 并指定文件的大致大小(1K、100K、1M、10M、1G 等)?
猜你喜欢
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 2017-03-24
  • 2010-12-21
  • 1970-01-01
  • 2021-09-03
  • 2013-03-20
相关资源
最近更新 更多