【问题标题】:Capture output of bash code run in python捕获在 python 中运行的 bash 代码的输出
【发布时间】:2015-10-29 19:45:34
【问题描述】:

我正在尝试使用以下代码捕获我在 python 脚本中执行的 bash 行的输出:

call_bash = subprocess.Popen(['/space/jazz/1/users/gwarner/test.sh'],stdout=subprocess.PIPE)
output = call_bash.communicate()[0]

这很好用,但我想更改它,以便将 bash 代码直接写入此 python 脚本(无需单独的 .sh 文件)。我知道我可以使用 subprocess.call() 从 python 运行 bash 代码,但我不知道如何捕获输出(如果我使用了错误的术语,通常会打印到终端上)。有人可以帮忙吗?

我在 CentOS 上运行 python 2.7

【问题讨论】:

  • 你的 bash 文件是什么样的?如果我们不知道它是什么,我们如何帮助将 shell 脚本合并为 python 脚本?
  • @heinst 我认为他在寻求通用解决方案。 op 想将 bash 脚本直接嵌入到 python 脚本中,而单独作为 bash 脚本执行
  • @heinst ssh me@cli.globusonline.org scp me#comp:/~/blah.text ep#comp:/register/ 这是脚本,尽管答案应该是相同的,不管它是什么。我问的是在 python 中执行 bash 代码并检索它的输出。
  • @GWarner 和我的测试,如果你这样做 print output 它应该包含 shell 脚本的输出
  • @heinst 是的,但我要问的是如何更改此代码,以便实际的 bash 代码位于 python 脚本中,而不是单独的 .sh 文件中。我正在寻找类似的东西:call_bash = subprocess.Popen(['ssh me@cli.globusonline.org scp me#comp:/~/blah.text ep#comp:/register/'],stdout=subprocess.PIPE)output = call_bash.communicate()[0]print output

标签: python linux bash subprocess stdout


【解决方案1】:

subprocess.Popen 的第一个参数是参数列表(除非您指定 shell=True)。

所以你可以做你的例子

call_bash = subprocess.Popen(['ssh', 'me@cli.globusonline.org', 'scp me#comp:/~/blah.text ep#comp:/register/'], stdout=subprocess.PIPE)
output = call_bash.communicate()[0]

这将调用带有 2 个参数的 ssh 命令,me@cli.globusonline.orgscp me#comp:/~/blah.text ep#comp:/register/

【讨论】:

  • 他们问如何在不使用外部脚本的情况下运行该命令,我的答案的哪一部分不满足这个问题?
猜你喜欢
  • 2015-05-08
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 2022-11-16
  • 2016-04-24
相关资源
最近更新 更多