5

Python を使用してコマンド ラインを呼び出し、いくつかのファイルを実行しようとしました。echoただし、 と の両方を含むコマンド ラインがある場合、 は|うまくsubprocess.call機能していないようです。私が実行したときのように:

echo "perp -t ../data/ReviewTest.text" | ./eva -b ../data/6.binlm

私は欲しいものを手に入れます。ただし、これを試すと:

import subprocess
e=["echo","\"perp", "-t", "../data/R.text\"", "|", "./eva", "-b", "../data/6.binlm"]
subprocess(e)

次のようにコマンドラインに表示されたエコー以外のすべてを取得します。

".prep -t ..data/ReviewTest.text" | ./eva -b ../data/6.binlm

subprocess.call()がある場合、echoそれ以降のすべてがコマンドラインに投げ出されるようです。

subprocessコマンドにechoとの両方が含まれている場合に使用できる解決策があることを願っています|

4

2 に答える 2

3

これにより、探している効果が得られる可能性があると思います(質問にリストされている最初のコマンドラインを正確に再現する必要があります):

>>> import subprocess
>>> e = 'echo "perp -t ../data/ReviewTest.text | ./eva -b ../data/6.binlm'
>>> subprocess.call(e, shell=True)
  1. "|" はシェルのメタ文字なので、で呼び出す必要がありsubprocess.callますshell=True

  2. コマンド ラインでは、文字列"perp -t ../data/ReviewTest.text"を の最初で唯一の引数としてecho渡すため、引数文字列の個々のコンポーネントだけでなく、同じ文字列を渡す必要がありsubprocess.callます。

于 2013-02-26T22:30:20.493 に答える
1

パイプ|は、シェルへの入力としてコマンドを実行する必要があることを意味するシェル構造です。これはshell=True、いつsubprocess.call()呼び出されるかを設定することを意味します。

import subprocess
subprocess.call("""echo "perp -t ../data/ReviewTest.text" | ./eva -b ../data/6.binlm""", shell=True)

Python ドキュメントにshell=Trueの使用に関する注意事項があります。

于 2013-02-26T22:29:35.760 に答える