我有一个简单的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
$
在我看来,echo
在 pig 中的“g”后面附加了一个不可见的 \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 和源自文件而给出不同的结果?据我所知,标准输入(来自 echo
)和文件(来自 some_lines.txt
)都以 \n
结尾,所以我会要么期望两者的输出都包含 第 4 行:
,要么两者的输出都不包含它。
最佳答案
此命令将回答您的问题:
echo 'hi' | od -c
尾随 \n
字符的原因是终端上的 stdout 默认情况下使用行缓冲 - 这意味着它只会显示以换行符结尾的输出数据。
使用 printf 命令:
printf "%s" foo
printf "%s\n" anotherfoo
关于python - bash/Python : does `echo` command insert a newline when acting as input to another command?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15728703/