別のサーバーで解釈されるのか、それとも別のサーバーでsubprocess.call("if [ ! -d '{output}' ]; then mkdir -p {output}; fi",shell=True)
解釈されるのsh
か疑問に思いましzsh
た。bash
誰かがこれについての考えを持っていますか?
それがによって解釈されることを確認するにはどうすればよいbash
ですか?
別のサーバーで解釈されるのか、それとも別のサーバーでsubprocess.call("if [ ! -d '{output}' ]; then mkdir -p {output}; fi",shell=True)
解釈されるのsh
か疑問に思いましzsh
た。bash
誰かがこれについての考えを持っていますか?
それがによって解釈されることを確認するにはどうすればよいbash
ですか?
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")
シェルを指定するには、実行可能パラメーターを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
選択したシェルを明示的に呼び出すことができますが、投稿したサンプルコードの場合、これは最善のアプローチではありません。代わりに、Pythonで直接コードを記述してください。ここを参照してください:Pythonのmkdir-p機能