0

私の現在のセットアップでは、

command = "somecommand '%s'" % test
subprocess.Popen(command.split(), stdout=subprocess.PIPE)

内部引用符 '' がある理由は、test にスペースがあるためですが、1 つの文字列 (パス) として解釈する必要があります。

ただし、コマンドが独自の追加文字列とともにパス引数を使用しようとするため、コマンドがエラーをスローすることに気付いたので、エラーをスローする ''path'/format' があります。

ただし、 somecommand 'path' を実行すると、シェルが文字列を解釈すると推測しているため、機能しますか? これは正しい理屈ですか?

私の質問は、Popen を実行する前にシェルで文字列を解釈する必要があるこのケースにどのように対処すればよいですか?

4

3 に答える 3

2

shlex.split分割に使用したいcommand

subprocess.Popen(shlex.split(command),stdout=subprocess.PIPE)

問題は、str.split何かを引用符で囲もうとしても気にしないことです。どれだけ引用しても、空白で文字列が分割されます。例えば

>>> "foo 'bar baz'".split()
['foo', "'bar", "baz'"]
>>> import shlex
>>> shlex.split("foo 'bar baz'")
['foo', 'bar baz']
于 2013-06-07T18:12:41.027 に答える