14

別のサーバーで解釈されるのか、それとも別のサーバーでsubprocess.call("if [ ! -d '{output}' ]; then mkdir -p {output}; fi",shell=True)解釈されるのshか疑問に思いましzshた。bash

誰かがこれについての考えを持っていますか?

それがによって解釈されることを確認するにはどうすればよいbashですか?

4

3 に答える 3

31

http://docs.python.org/2/library/subprocess.html

On Unix with shell=True, the shell defaults to /bin/sh

/ bin / shは、ubuntuなどの別の何かにシンボリックリンクされていることが多いことに注意してください。

$ ls -la /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29  2012 /bin/sh -> dash

引数を使用しexecutableて、デフォルトを置き換えることができます。

... shell = Trueの場合、Unixでは、実行可能引数はデフォルトの/ bin/shの代わりのシェルを指定します。

subprocess.call("if [ ! -d '{output}' ]; then mkdir -p {output}; fi",
                shell=True,
                executable="/bin/bash")
于 2013-03-16T12:49:25.360 に答える
4

シェルを指定するには、実行可能パラメーターshell=True次のように使用します。

shell = Trueの場合、Unixでは、実行可能引数はデフォルトの/ bin/shの代わりのシェルを指定します。

In [26]: subprocess.call("if [ ! -d '{output}' ]; then mkdir -p {output}; fi", shell=True, executable='/bin/bash')
Out[26]: 0

明らかに、実行可能パラメーターを使用する方がクリーンですが、shからbashを呼び出すこともできます。

In [27]: subprocess.call('''bash -c "if [ ! -d '{output}' ]; then mkdir -p {output}; fi"''', shell=True)
Out[27]: 0
于 2013-03-16T12:50:30.607 に答える
3

選択したシェルを明示的に呼び出すことができますが、投稿したサンプルコードの場合、これは最善のアプローチではありません。代わりに、Pythonで直接コードを記述してください。ここを参照してください:Pythonのmkdir-p機能

于 2013-03-16T12:49:47.267 に答える