私は単純なpythonスクリプトを持っていますline_printer.py
:
import fileinput
i = 1
for line in fileinput.input():
print 'Line', str(i), ':', line.strip()
i+=1
echo
コマンドからこのスクリプトへのデータのパイピングが、ファイルからのデータの読み取りと比較して、結果にどのように影響するかを理解しようとしています。
次の呼び出しと出力を検討してください。
$ echo -e "chicken\ncow\npig"
chicken
cow
pig
$
これは、豚の「g」の後にecho
不可視を追加したように見えます。\n
それで、どうして私が電話したとき:
echo -e "chicken\ncow\npig" | python line_printer.py
私は得る:
Line 1 : chicken
Line 2 : dog
Line 3 : cow
出力としてではなく:
Line 1 : chicken
Line 2 : dog
Line 3 : cow
Line 4 :
最初は、Python のfileinput
モジュールの動作は、ファイルの最終行が空白の場合、その行を破棄するのではないかと考えていました。しかし、ファイルの内容を使用しようとするとsome_lines.txt
:
chicken
dog
cow
<blank line>
入力として:
python line_printer.py some_lines.txt
私が得る出力は次のとおりです。
Line 1 : chicken
Line 2 : dog
Line 3 : cow
Line 4 :
line_printer.py
では、入力が標準入力からのものか、ファイルからのものかによって、入力の結果が異なるのはなぜですか? stdin (from echo
) とファイル (from some_lines.txt
) の両方が で終わる\n
ので、両方の出力に が含まれるか、どちらの出力にも含まれないと予想Line 4 :
されます。