Python, пытающийся запустить программу из командной строки
-
21-09-2019 - |
Вопрос
Я пытаюсь запустить программу из командной строки в Windows.У меня возникли некоторые проблемы.Код приведен ниже:
commandString = "'C:\Program Files\WebShot\webshotcmd.exe' //url '" + columns[3] + "' //out '"+columns[1]+"~"+columns[2]+".jpg'"
os.system(commandString)
time.sleep(10)
Таким образом, с помощью одинарных кавычек я получаю "Синтаксис имени файла, каталога или метки тома неверен". Если я заменю одинарные кавычки на \", то это говорит что-то вроде "'C:\Program' не является допустимым исполняемым файлом ".
Я понимаю, что это синтаксическая ошибка, но я не совсем уверен, как это исправить....
столбец [3] содержит полную копию URL, вставленную из веб-браузера (поэтому она должна быть закодирована в URL).столбец [1] будет содержать только цифры и точки.столбец [2] содержит некоторый текст, двойные кавычки и двоеточия заменены.Упоминая на всякий случай...
Спасибо!
Решение
Используйте подпроцесс модуль для вызова системных команд.Кроме того, попробуйте удалить одинарные кавычки и использовать двойные кавычки.
Другие советы
- В этой ситуации Windows требует использования двойных кавычек, а вы использовали одинарные кавычки.
- Используйте
subprocess
модуль , а неos.system
, который является более надежным и позволяет избежать прямого вызова командной оболочки, благодаря чему вам не придется беспокоиться о запутанных проблемах с экранированием. - Не используйте
+
чтобы соединить длинные нити.Используйте форматирование строки (string %s" % (formatting,)
), который более удобочитаем, эффективен и идиоматичен. - В этом случае все равно не формируйте длинную строку в качестве команды оболочки, составьте список и передайте его
subprocess.call
. - Насколько я могу судить, вы избегаете прямой косой черты, но не обратной, то есть обратной.Строковый литерал с
//
имеет обе косые черты в строке, которую он создает.В любом случае, вместо того и другого вам следует использоватьos.path
модуль, который позволяет избежать любой путаницы при разборе экранирований и часто делает скрипты более переносимыми.