Python, пытающийся запустить программу из командной строки

StackOverflow https://stackoverflow.com/questions/2282544

Вопрос

Я пытаюсь запустить программу из командной строки в 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 модуль, который позволяет избежать любой путаницы при разборе экранирований и часто делает скрипты более переносимыми.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top