我在这里看到了一些使用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()
答案 0 :(得分: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()