python - bash/Python : does `echo` command insert a newline when acting as input to another command?

标签 python bash

我有一个简单的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/

相关文章:

python - 为什么我们应该更愿意将序列化数据而不是原始代码存储到数据库中?

linux - 确定定义 UNIX 别名的位置

linux - 使用输入文件作为参数提取 tgz 的 Bash 脚本

python - 无法使用 anaconda 安装 GCC

python - 使用每个条目实例变量删除列表中重复项的最快方法

python - Google App Engine 搜索 API 将光标设置在特定位置

python - 如何将不带引号的字符串转换为python中的字典

bash - 使用 “let”分配Bash失败,使用 “/”

bash - 如何删除 BASH 中 {} 大括号之外的所有内容?

git - 从私有(private) Git 存储库中推送/pull 的 Bash 脚本?