2

Python を使用して以下のシステム コマンドを実行しようとしています。

cat txt_file | egrep "keyword1|keyword2|keyword3"

以下のpythonコードを使用:

p1 = subprocess.Popen (['cat', txt_file], stdout=subprocess.PIPE)
p2 = subprocess.Popen (['egrep', "\"" + keyword_list + "\""], stdin=p1.stdout, stdout=subprocess.PIPE)

#where keyword_list is : "keyword1|keyword2|keyword3"

p1.stdout.close() #for p2 to exit if SIGPIPE from p1
out = p2.communicate()[0]

egrep 出力には複数の行がありますが、上記のスクリプトを使用すると、変数の中間のキーワード 2 に一致する行のみを取得できますout

ここで何が問題になる可能性がありますか?

更新: プラットフォーム: Windows txt_file はかなり大きい ~8 MB

4

2 に答える 2

0

私はそれがものだと思います(ところで、"\""それはより良く見えるでしょう)。'"'

Popen() なし で呼び出しているshell=Trueため、必要に応じてパラメーターを指定する必要があります。通常のegrep呼び出しで""は、シェルによって取り除かれます。これは、ここにはありません。ここでは必要ありません。

于 2013-07-26T07:14:21.400 に答える
0

次の回避策で解決された問題:

#Using file as stdin for p2
txt_file = open ('txt_file_path')
p2 = subprocess.Popen (['egrep', keyword_list, stdin=txt_file)
out = p2.communicate()[0]
txt_file.close()
于 2013-07-26T08:12:02.953 に答える