Python:将python脚本作为子进程运行并获取输出

时间:2018-02-19 23:16:39

标签: python

我有一个python脚本calculate.py,其中包含一个函数,如下所示

def mytest():
    Y_pred = {} 
    Y_pred['a'] = [1,2,3]
    Y_pred['b'] = [45,54,77]
    return Y_pred

现在从python控制台我想使用subprocess运行python脚本并将返回值“Y_pred”变为变量。所以我想要从终端

下面的伪代码
python3
>>> import subprocess
>>> returned_val =  subprocess.call([run calculate.py here and call mytest() ])

最后,我希望将mytest()的返回值变为变量returned_val

2 个答案:

答案 0 :(得分:1)

你需要做一些事情。

首先,在calculate.py调用mytest函数,最后添加以下内容:

if __name__ == '__main__':
    print(mytest())

现在,当您执行calculate.py脚本(例如使用python3 /path/to/calculate.py)时,您将获得mytest的返回值作为输出。

好的,现在您可以使用subprocess.check_output来执行脚本,并获得输出:

returned_bin =  subprocess.check_output('/usr/bin/python3 /path/to/calculate.py'.split())

相应地替换路径。

returned_val的值为二进制字符串。您需要解码它以获取相应的文本字符串:

returned_val = returned_bin.decode('utf-8')  # assuming utf-8

现在,由于myfunc的返回值为dict,而returned_val中的返回值为字符串, 您可以使用json.loads(returned_val)来获得相同的dict代表。

答案 1 :(得分:1)

subprocess.check_output

import subprocess
[ print(i) for i in subprocess.check_output(['ls']).split() ]

输出,我当前的目录:

b'a.sh'
b'app'
b'db'
b'old.sh'