5

python subprocess モジュールでサブシェルとリダイレクトの魔法を使いたいのですが、うまくいかないようで、予期しないトークンについて不平を言うのは括弧です。たとえば、コマンド

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)'
4

1 に答える 1

11

<(head tmp)構文は「bashプロセス置換」と呼ばれる機能です。ベーシック/ポータブル/bin/shはそれをサポートしていません。(これは、/bin/sh/bin/bashが同じプログラムであるシステムにも当てはまります。プレーンとして呼び出された場合、この機能は許可されない/bin/shため、移植性のない機能に誤って依存することはありません。)

>>> subprocess.Popen(["/bin/bash", "-c", "cat <(head tmp)"])
<subprocess.Popen object at 0x1004cca50>
于 2011-09-13T20:01:54.103 に答える