2013-03-16 9 views
7

subprocess.call("if [ ! -d '{output}' ]; then mkdir -p {output}; fi",shell=True)bashの代わりにshまたはzshと解釈されるかどうかは別のサーバーにありますか?サブプロセスの `shell = True`の` shell`は `bash`を意味していますか?

誰でもこれについてのアイデアはありますか?

bashによって解釈されるようにするにはどうすればよいですか?

+0

それは意味 - デフォルトのシェルを使用する - つまり、デフォルトが何であれ –

+0

@JonClementsありがとう、Jon!しかし、それがbashによって解釈されていることを確認するために私は何をすべきですか? –

+1

@ Firegun '/ usr/bin/env bash'を呼び出して、コマンドとして入力します。 – millimoose

答えて

22

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引数を使用することができます。

...シェルは=真、 Unix上で実行可能な引数が/ デフォルトの交換シェルを指定した場合bin/sh。

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

あなたは明示的にお好みのシェルを起動することができますが、サンプルコードのために、あなたは、これが最善のアプローチではありません投稿しました。代わりにPythonでコードを直接記述してください。ここを参照してください:mkdir -p functionality in Python

3

はシェルを指定するには、use the executable parametershell=Trueで:

シェル= 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 
関連する問題