如何通过子进程将多个参数发送给python

时间:2018-10-08 11:15:58

标签: python subprocess

我有两个位于不同目录的python文件。

folder1
    |--> routing.py
folder2
    |--> script.py

我想从script.py执行routing.pyscript.py需要多个参数来运行。目前,我正在使用subprocess模块python。

routing.py

import os
import subprocess
import sys

def test():
    dirpath = os.getcwd()
    os.chdir(folder2_path)
    output = subprocess.check_output([sys.executable, "script.py", param1, param2, param3 ])

但是,我得到

raise CalledProcessError(retcode, cmd, output=output)

还有更好的方法吗?我想念什么吗?

3 个答案:

答案 0 :(得分:1)

对我有用

python1.py

import sys
global var
arg1 = sys.argv[1]
arg2 = sys.argv[2]

var = int(arg1) + int(arg2)
print var

下一个文件是

import os
import subprocess
import sys

def test():
    dirpath = os.getcwd()
    os.chdir('.')
    output = subprocess.check_output([sys.executable, "python1.py", '3', '3' ])
    print "output: ",output

test()

答案 1 :(得分:1)

此处的代码存在多个问题。希望这是最小的解决方法:

import os
import subprocess
import sys

def test():
    return subprocess.check_output([
        os.path.join(['folder1', sys.executable], 
        os.path.join(['folder2', "script.py"],
        param1, param2, param3 ])

更好的解决方案是重构script.py,以便您可以从当前脚本中import进行重构。从要求当前目录为当前脚本的目录的意义上来说,这也是脆弱的。

答案 2 :(得分:0)

您正试图从其他文件夹中调用脚本。尝试使用../folder2/script.py作为check_output的参数,或者,如果其他脚本也包含相对/非绝对路径,请考虑重写它,以便您可以从中导入方法和类,而不必尝试在外部执行。 / p>