1

Python2.4.xはこちら。

サブプロセスをglobで動作させるために頭を叩いてきました。

さて、ここに問題のある領域があります。

def runCommands(thecust, thedevice):
    thepath='/smithy/%s/%s' % (thecust,thedevice)
    thefiles=glob.glob(thepath + '/*.smithy.xml')
    p1=subprocess.Popen(["grep", "<record>"] + thefiles, stdout=subprocess.PIPE)
    p2=subprocess.Popen(['wc -l'], stdin=p1.stdout, stdout=subprocess.PIPE)
    p1.stdout.close()
    thecount=p2.communicate()[0]
    p1.wait()

画面に「grep:出力の書き込み:パイプが壊れています」というエラーが多数表示されます。

それは私が見逃している単純なものでなければなりません、私はそれを見つけることができません。何か案が?

前もって感謝します。

4

2 に答える 2

5

ここでの問題はp2、引数リスト['wc', '-l']の代わりにを使用する必要があるということです['wc -l']

現在、実行する名前の実行可能ファイルを探していますが'wc -l'、見つかりません。p2すぐに失敗し、に接続されているものがないためp1.stdout、パイプの破損エラーが発生します。

次のコードを試してください。

def runCommands(thecust, thedevice):
    thepath='/smithy/%s/%s' % (thecust,thedevice)
    thefiles=glob.glob(thepath + '/*.smithy.xml')
    p1=subprocess.Popen(["grep", "<record>"] + thefiles, stdout=subprocess.PIPE)
    p2=subprocess.Popen(['wc', '-l'], stdin=p1.stdout, stdout=subprocess.PIPE)
    p1.stdout.close()
    thecount=p2.communicate()[0]
    p1.wait()
于 2012-05-31T18:57:01.240 に答える
0

p1.stdoutこれは、 grepの出力が完了する前に閉じているためと思われます。多分あなたは閉じるつもりでしたpt.stdinか?ただし、どちらも閉じる理由はないようですので、p1.stdout.close()ステートメントを削除します。

于 2012-05-31T18:46:28.363 に答える