Python, пытающийся запустить программу из командной строки - PullRequest
0 голосов
/ 17 февраля 2010

Я пытаюсь запустить программу из командной строки в 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] содержит текст, двойные кавычки и двоеточия заменяются. Упоминание на всякий случай ...

Спасибо!

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010
  • Windows требует двойных кавычек в этой ситуации, и вы использовали одинарные кавычки.
  • Используйте модуль subprocess вместо os.system, который является более надежным и не требует непосредственного вызова оболочки, поэтому вам не нужно беспокоиться о путанице в проблемах с экранированием.
  • Не используйте +, чтобы собрать длинные строки. Используйте форматирование строки (string %s" % (formatting,)), которое более читабельно, эффективно и идиоматично.
  • В этом случае, в любом случае, не формируйте длинную строку в качестве команды оболочки, составьте список и передайте его subprocess.call.
  • Насколько я могу судить, вы избегаете косой черты, но не обратной, то есть обратной. Строковый литерал с // содержит две косые черты в строке, которую он создает. В любом случае, вместо того, чтобы использовать любой из них, вы должны использовать модуль os.path, который позволяет избежать путаницы при разборе escape-символов и часто делает сценарии более переносимыми.
1 голос
/ 17 февраля 2010

Используйте модуль подпроцесс для вызова системных команд. Также попробуйте удалить одинарные кавычки и использовать двойные кавычки.

...