我想从函数中调用外部脚本,例如:
import subprocess
def call_script(script):
subprocess.call(script)
return answer #retrieving the result is the part I'm struggling with
call_script("/user/bin/calc_delta.py")
脚本calc_delta.py只在完成后打印结果。如何将该脚本的结果分配给变量?谢谢。
答案 0 :(得分:4)
您应该使用subprocess.call
并在其上调用Popen
,而不是使用communicate
。
这样您就可以阅读stdout
和stderr
了。您还可以使用stdin
输入数据。
文档http://docs.python.org/library/subprocess.html#replacing-bin-sh-shell-backquote中的示例:
output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
答案 1 :(得分:3)
在Python≥2.7/≥3.1中,您可以使用subprocess.check_output
将标准输出转换为str。
answer = subprocess.check_output(['/usr/bin/calc_delta.py'])
如果您需要的是shell命令,那么Python上也有subprocess.getstatusoutput
和subprocess.getoutput
≥3.1,但仅在* NIX上支持。
答案 2 :(得分:2)
您应该查看subprocess.Popen(popen)
例如(来自文档):
pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout
subprocess.call
只会为您提供呼叫的响应代码,而不是输出。