我想在程序名和参数中转义'“'以及所有其他野性字符,所以我尝试双引号。我可以在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']
谢谢!
答案 0 :(得分:4)
加强谷歌来到这个页面
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""'
确实有效!
答案 1 :(得分:3)
实际上,它只是作为设计工作。 你不能像那样使用os.system。看到这个: http://mail.python.org/pipermail/python-bugs-list/2000-July/000946.html
答案 2 :(得分:1)
尝试使用os.system('python "test.py" "a" "b" "c"')
您也可以将子流程模块用于此类目的,
请看一下this thread
更新:当我这样做时,os.system('"test.py" "a" "b" "c"')
,我得到了类似的错误,但没有os.system('test.py "a" "b" "c"')
,所以,我想假设第一个参数不应该是双倍的 - 引用
答案 3 :(得分:0)
将参数括在括号中,它可以正常工作。
CMD /k ("c:\batch files\test.cmd" "Parameter 1 with space" "Parameter2 with space")