3

次のpythonスクリプトを検討してください

#test.py
import sys
inputfile=sys.argv[1]
with open(inputfile,'r') as f:
    for line in f.readlines():
        print line

with open(inputfile,'r') as f:
    for line in f.readlines():
        print line

今、私は置換されたプロセスで実行したいtest.py、例えば、

python test.py <( cat file | head -10)

2番目f.readlinesは空を返すようです。2 つの入力ファイルを指定せずにそれを行う方法はありますか?

4

2 に答える 2

4
  • 何故ですか。
    • プロセス置換は、名前付きパイプを作成することによって機能します。したがって、すべてのデータは最初のオープン/読み取りループで消費されます。
  • 2 つの入力ファイルを指定せずにそれを行う方法はありますか。
    • データを使用する前にバッファリングするのはどうですか。

これがサンプルコードです

import sys
import StringIO
inputfile=sys.argv[1]

buffer = StringIO.StringIO()

# buffering
with open(inputfile, 'r') as f:
    buffer.write(f.read())

# use it 
buffer.seek(0)
for line in buffer:
    print line

# use it again
buffer.seek(0)
for line in buffer:
    print line
于 2014-04-01T06:02:10.613 に答える
1

readlines()入力から利用可能なすべての行を一度に読み取ります。これが、読み取るものが残っていないため、2 番目の呼び出しが何も返さない理由です。の結果をreadlines()ローカル変数に代入して、何度でも使用できます。

import sys
inputfile=sys.argv[1]
with open(inputfile,'r') as f:
    lines = f.readlines()
    for line in lines:
        print line

    #use it again
    for line in lines:
        print line
于 2014-04-01T07:00:05.047 に答える