3

プログラム名と引数で'"'と他のすべてのワイルド文字をエスケープしたいので、それらを二重引用符で囲んでみます。これは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 に答える 4

5

ファーシンググーグルはこのページに来る

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""'動作します!

于 2009-12-16T08:04:58.510 に答える
3

実際には、それはデザインとして機能します。そのようなos.systemを使用することはできません。これを参照してください:http: //mail.python.org/pipermail/python-bugs-list/2000-July/000946.html

于 2009-12-16T07:47:41.603 に答える
1

で試してみてくださいos.system('python "test.py" "a" "b" "c"')

そのような目的でサブプロセスモジュールを使用することもできます。

このスレッドを見てください

更新:私がそうするときos.system('"test.py" "a" "b" "c"')、私は同様のエラーを受け取りましたが、ではありませんos.system('test.py "a" "b" "c"')、それで、私は最初のパラメータが二重引用符で囲まれるべきではないと仮定したいと思います

于 2009-12-16T07:03:11.503 に答える
0

引数を角かっこで囲んでください。機能します。

CMD /k ("c:\batch files\test.cmd" "Parameter 1 with space" "Parameter2 with space")
于 2013-05-30T05:37:12.107 に答える