我有一个简单的 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 :
起初我认为 Pythonfileinput
模块的行为可能是丢弃文件中的最后一行,如果它是空白的。但是当我尝试使用文件的内容时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
)都以 a 结尾\n
,所以我要么期望两者Line 4 :
的输出包含它,要么都不包含它的输出。