двойная кавычка в os.system на windows - PullRequest
3 голосов
/ 16 декабря 2009

Я хочу экранировать "" "и все другие символы в имени программы и аргументах, поэтому я пытаюсь заключить их в двойные кавычки. Это можно сделать в cmd.exe

C:\bay\test\go>"test.py" "a" "b"  "c"
hello
['C:\\bay\\test\\go\\test.py', 'a', 'b', 'c']

а что не так со следующим кодом, использующим os.sytem?

cmd = '"test.py" "a" "b" "c"'
print cmd
os.system(cmd)

его вывод:

C:\bay\test\go>test2.py
"test.py" "a" "b" "c"
'test.py" "a" "b" "c' is not recognized as an internal or external command,
operable program or batch file.

Почему вся строка '"test.py" "a" "b" "c"' распознается как одна команда? Но следующий пример не такой:

cmd = 'test.py a b c'
print cmd
os.system(cmd)

C:\bay\test\go>test2.py
test.py a b c
hello
['C:\\bay\\test\\go\\test.py', 'a', 'b', 'c']

Спасибо!

Ответы [ 4 ]

4 голосов
/ 16 декабря 2009

Гугл приходит на эту страницу

http://ss64.com/nt/syntax-esc.html

To launch a batch script which itself requires "quotes" 
CMD /k ""c:\batch files\test.cmd" "Parameter 1 with space" "Parameter2 with space"" 

cmd = '""test.py" "a" "b" "c""' работает!

3 голосов
/ 16 декабря 2009

На самом деле, это просто работает как дизайн. Вы не можете использовать os.system таким образом. Видеть это: http://mail.python.org/pipermail/python-bugs-list/2000-July/000946.html

1 голос
/ 16 декабря 2009

Попробуйте с os.system('python "test.py" "a" "b" "c"')

Вы также можете использовать модуль подпроцесса для таких целей,

пожалуйста, посмотрите эту тему

ОБНОВЛЕНИЕ : Когда я делаю, os.system('"test.py" "a" "b" "c"'), я получаю похожие ошибки, но не на os.system('test.py "a" "b" "c"'), поэтому я хотел бы предположить, что первый параметр не должен заключаться в двойные кавычки

0 голосов
/ 30 мая 2013

Заключите аргументы в скобки, все работает.

CMD /k ("c:\batch files\test.cmd" "Parameter 1 with space" "Parameter2 with space")
...