2014-10-18 34 views
0

我在这里看到了其他一些运行Python子流程的问题,但没有一个解决了我目前遇到的问题。对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

检查调用返回到只有返回码。您还需要打印Hello World。因为唯一的方法是捕获打印输出。可能使用check_output? – Gohn67 2014-10-18 14:28:42

+0

如果你想看到输出使用'print(do_something())' – 2014-10-18 14:48:50

回答

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

感谢您的信息,我会尽力让它使用它!我目前的实现没有打印任何东西它不应该至少打印出返回码吗? – mino 2014-10-18 14:40:16

+0

是的,它应该。我在我的系统上测试了你的脚本,它工作。它打印0 – Gohn67 2014-10-18 14:43:21

+0

有趣的..它不打印我! – mino 2014-10-18 14:44:46