Столкнулся с неприятной ситуацией с тихой установкой какой-то программы. Я не уверен, что они используют какое-либо соглашение для установки флагов со значениями, но вот что следует использовать для установки:
"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\"
в основном появляются косые черты, и установка не удалась. Теоретически я могу создать свою собственную строку, но тот же провайдер для другого исполняемого файла предоставляет другой синтаксис, более совместимый с подпроцессом. Мне интересно, можно ли настроить список аргументов для удовлетворения требований установщика?
shell=True
, когда этого делать не следует. - person chepner   schedule 19.06.2020shell=True
просто переключает от выполнения команды непосредственно к запуску оболочки со сконструированным аргументом, чтобы оболочка выполняла команду для вас. - person chepner   schedule 19.06.2020command
:fr'-f2"{uinstall_log_file}"'
. Вы можете опустить их. - person chepner   schedule 19.06.2020uninstall_log_file
и какую фактическую команду вы используете для запуска исполняемого файла? - person chepner   schedule 20.06.2020command
, как я указал ранее. Вы добавляете кавычки, чтобы помешать оболочке обработать значениеuninstall_log_file
, но нет такой оболочки. Попробуйтеcommand = [..., '-f2', uninstall_log_file]
. - person chepner   schedule 22.06.2020