Передача аргументов в subprocess.call - PullRequest
0 голосов
/ 19 июня 2020

Столкнулся с неприятной ситуацией с тихой установкой какой-то программы. Я не уверен, что они используют какое-либо соглашение для флагов установки со значениями, но вот что следует использовать для установки:

"path with spaces\setup.exe" -uninst -s -f2"path with spaces\uninstall.log"

вы не можете использовать --f2 = "путь с пробелами \ uninstall.log" или - f2 = "путь с пробелами \ uninstall.log" или -f2 "путь с пробелами \ uninstall.log"

поэтому, если я использую в Python следующую команду:

command = [self.setup_exe, '-uninst', '-s', fr'-f2"{uninstall_log_file}"']

, подпроцесс выполняется (получить из subprocess.list2cmdline (command) ):

setup.exe" -uninst -s -f2\"some path\temp build 12\uninstall.log\"

в основном появляются косые черты и установка не выполняется. Теоретически я могу создать свою собственную строку, но тот же поставщик для другого исполняемого файла предоставляет другой синтаксис, более совместимый с подпроцессом. Мне интересно, можно ли настроить список аргументов для удовлетворения требований установщика?

1 Ответ

0 голосов
/ 22 июня 2020

Если вы запустите

"path with spaces\setup.exe" -uninst -s -f2"path with spaces\uninstall.log"

из командной строки, эквивалентный вызов subprocess.call будет

uninstall_log_file = r"path with spaces\uninstall.log"
command = [self.setup_exe, '-uninst', '-s', f'-f2{uninstall_log_file}']
subprocess.call(command)
...