Как запустить EXE-файл с аргументами, используя Python

Предположим, у меня есть файл 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])

но это не сработало.

5 ответов

Вы также можете использовать 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, Вы можете прочитать больше на этот вопрос.

Принятый ответ устарел. Для всех, кто нашел это, теперь вы можете использовать subprocess.run(), Вот пример:

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

Аргументы также могут быть отправлены в виде строки вместо списка, но вам нужно установить shell=True, Официальную документацию можно найти здесь.

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

Должно сработать.

Я не понимал, как работают аргументы. Пример: «-fps 30» - это не один, а два аргумента, которые нужно было передать следующим образом (Py3)

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

Может это кому-то поможет.

Вот хороший пример. В дальнейшем я получил аргумент 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): заявление, потому что мне не нужен первый аргумент.

Другие вопросы по тегам