【问题标题】:Python Subprocess - Doesn't return anythingPython 子进程 - 不返回任何内容
【发布时间】:2014-10-18 14:26:03
【问题描述】:

我在这里看到了一些使用 Python 运行子进程的其他问题,但没有一个能够解决我目前遇到的问题。对 Python 来说相对较新,所以只是随便玩玩,我确信这是一个简单的解决方案。但我就是无法让它工作!

我想要一个子进程返回一些数据,但事实并非如此。所以我写了这个基本的例子来尝试让它工作,但它仍然没有。我哪里错了?我没有收到任何错误或任何东西,它只是什么也没做。

sp_test.py

import os
import subprocess

def main():
    subp = subprocess.check_call(['python', 'sp.py'])
    print subp


if __name__ == '__main__':
    main()

还有……

sp.py

def do_something():
    return "Hello World!"


do_something()

exit()

【问题讨论】:

  • 检查调用只返回返回码。您还需要打印 Hello World。由于唯一的方法是捕获打印输出。使用 check_output 可能吗?
  • 如果你想看到输出使用print(do_something())

标签: python python-2.7 subprocess


【解决方案1】:

您的实施存在两个问题。

1.

check_call 只返回 0 的 returncode 否则抛出异常。 (见https://docs.python.org/2/library/subprocess.html#subprocess.call

2.

您还试图通过简单地返回一个值来捕获Hello World! 的值。这将无法使用子流程。如果您想这样做,您可能需要研究 Pyro4 (https://pythonhosted.org/Pyro4/intro.html) 之类的东西


如果您仍想使用子流程,这是一种解决方案。

首先你可以使用 check_output (https://docs.python.org/2/library/subprocess.html#subprocess.check_output)。这将捕获您的子流程的任何输出。

然后在您的sp.py 程序中,您需要打印结果do_something

sp_test.py

import os
import subprocess

def main():
    subp = subprocess.check_output(['python', 'sp.py'])
    print subp

if __name__ == '__main__':
    main()

sp.py

def do_something():
    return "Hello World!"


print do_something()

exit()

【讨论】:

  • 感谢您的信息,我会努力让它工作的!我当前的实现什么也没打印出来。不应该至少打印出返回码吗?
  • 是的,应该。我在我的系统上测试了你的脚本并且它有效。它打印了 0
  • 有趣..它对我来说什么也没打印!
  • 应该没有影响,但你使用的是什么操作系统?
  • 也许试试这个简单的例子:subprocess.check_call(['echo', 'Hello World!'])
猜你喜欢
  • 2015-05-06
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
相关资源
最近更新 更多