2011-09-13 17 views
4

私は、サブシェルとリダイレクトの魔法をpythonサブプロセスモジュールで使いたいと思っていますが、予期しないトークンが括弧であると不平を言って動作していないようです。例えば、サブプロセスに渡されたコマンドPythonのサブプロセス、サブシェル、リダイレクト

cat <(head tmp)

この

>>> subprocess.Popen("cat <(head tmp)", shell=True) 
<subprocess.Popen object at 0x2b9bfef30350> 
>>> /bin/sh: -c: line 0: syntax error near unexpected token `(' 
/bin/sh: -c: line 0: `cat <(head tmp)' 
+1

お知らせあなたのエラーは '/ bin/sh'から来ていると思います。文法は 'bash'だけであると思います。サブプロセスで 'bash'を実行しますか?それは質問ですか? –

+0

@ S.Lott私は私のインストールでshがbashだと思った。確かに、もし私が 'man sh'をやったとしたら、manページはbashでした。スコットラムは、 'sh'と呼ばれるとこの機能は利用できないと指摘しました。ある意味では、私はそれがすでにだと思っていたとしても、それを' bash'として実行したかったのです。 –

+0

そして、Pythonがあなたが望むことができるときに、なぜあなたはシェルに砲撃していますか? –

答えて

10

<(head tmp)構文は、 "プロセス置換" と呼ばれるbash機能で提供します。基本/携帯用/bin/shはサポートしていません。 (これはさえ/bin/sh/bin/bashは同じプログラムであるシステム上の事実である;ので、あなたが誤って非ポータブル機能に依存しませんプレーン/bin/shとして呼び出されたとき、それは、この機能を使用できません。)

>>> subprocess.Popen(["/bin/bash", "-c", "cat <(head tmp)"]) 
<subprocess.Popen object at 0x1004cca50> 
関連する問題