22

假设我有一个文件RegressionSystem.exe。我想用一个-config参数执行这个可执行文件。命令行应该是这样的:

RegressionSystem.exe -config filename

我试过像:

regression_exe_path = os.path.join(get_path_for_regression,'Debug','RegressionSystem.exe')
config = os.path.join(get_path_for_regression,'config.ini')
subprocess.Popen(args=[regression_exe_path,'-config', config])

但它没有用。

4

5 回答 5

23

subprocess.call()如果你愿意,你也可以使用。例如,

import subprocess
FNULL = open(os.devnull, 'w')    #use this if you want to suppress output to stdout from the subprocess
filename = "my_file.dat"
args = "RegressionSystem.exe -config " + filename
subprocess.call(args, stdout=FNULL, stderr=FNULL, shell=False)

call和之间的区别Popen基本上call是阻塞而Popen不是,Popen提供更通用的功能。通常call适用于大多数用途,它本质上是Popen. 您可以在这个问题上阅读更多内容。

于 2013-04-10T15:10:11.950 回答
17

对于其他发现此问题的人,您现在可以使用subprocess.run(). 这是一个例子:

import subprocess
subprocess.run(["RegressionSystem.exe", "-config filename"])

参数也可以作为字符串发送,但您需要设置shell=True. 官方文档可以在这里找到。

于 2019-04-10T20:28:08.187 回答
3
os.system("/path/to/exe/RegressionSystem.exe -config "+str(config)+" filename")

应该管用。

于 2013-04-10T15:00:44.483 回答
0

我不明白论点是如何起作用的。例如:“-fps 30”不是一个,而是两个必须像这样传递的参数(Py3)

args=[exe,"-fps","30"].

也许这对某人有帮助。

于 2021-10-01T13:34:01.503 回答
0

在这里,我想提供一个很好的例子。在下文中,我得到了count当前程序的参数,然后将它们附加到一个数组中作为argProgram = []. 最后我打电话subprocess.call(argProgram)完全直接地通过它们:

import subprocess
import sys

argProgram = []

if __name__ == "__main__":

    # Get arguments from input
    argCount = len(sys.argv)
    
    # Parse arguments
    for i in range(1, argCount):
        argProgram.append(sys.argv[i])

    # Finally run the prepared command
    subprocess.call(argProgram)

在这个code我应该运行一个名为“Bit7z.exe”的可执行应用程序:

python Bit7zt.py Bit7zt.exe -e 1.zip -o extract_folder

注意: 我使用了 offor i in range(1, argCount):语句,因为我不需要第一个参数。

于 2021-04-28T11:25:14.380 回答