如何使用python运行带有参数的exe文件

时间:2013-04-10 14:40:13

标签: python windows python-2.7 subprocess

假设我有一个文件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 个答案:

答案 0 :(得分:15)

如果需要,您还可以使用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)

callPopen之间的差异基本上是call阻止而Popen不阻止,Popen提供更多通用功能。通常call适用于大多数用途,它基本上是Popen的一种方便形式。您可以在this question了解更多信息。

答案 1 :(得分:3)

os.system("/path/to/exe/RegressionSystem.exe -config "+str(config)+" filename")

应该工作。

答案 2 :(得分:0)

接受的答案已过时。对于其他发现此问题的人,您现在可以使用subprocess.run()。这是一个示例:

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

参数也可以作为字符串而不是列表发送,但是您需要设置shell=True。可以找到here的官方文档。

答案 3 :(得分: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

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