Python 使用管道输入时表现怪异

Python behaves weird with piped input

由于我的代码中存在一些奇怪的行为,我无法从 python 程序中的 .txt 文件读取输入。我正在 运行 我的 python 脚本是这样的:

python3 file.py < input.txt

我的 python 文件 (file.py) 看起来像这样:

inDATA = ''

for i in range(7):
    tmp = str(input())
    print(tmp)
    inDATA = "X" + inDATA + tmp
    print(inDATA)

print(inDATA)

我的输入文件(input.txt)如下:

1
2
3
4
5
6
7

当我 运行 我的 python 并从控制台输入输入 (1\n2\n3...) 时,我得到了预期的输出:

1
X1
2
XX12
3
XXX123
4
XXXX1234
5
XXXXX12345
6
XXXXXX123456
7
XXXXXXX1234567
XXXXXXX1234567

然而,当我 运行 python3 file.py < input.txt 我得到

1
X1
2
2X1
3
3XX1
4
4XXX1
5
5XXXX1
6
6XXXXX1
7
7XXXXXX1
7XXXXXX1

有谁知道是什么导致了这种行为?

我也尝试在 python2 中使用 python file.py < input.txt 运行 这个(并将 input() 更改为 raw_input()),但它没有效果。

编辑: 这个问题不是 "How to pipe input to python line by line from linux program?" 的重复,那个问题问的是 How to pipe,这个问题,另一方面,是关于 为什么 从文件

进行管道传输时代码表现得很奇怪

是一个回车-return和换行的东西,但是你没有提供足够的线索来确定确切的问题。

在 print 语句中使用它们之前,先将以下内容添加到字符串的末尾进行试验。 +'\r' +'\n'

阅读 https://blog.codinghorror.com/the-great-newline-schism/ 后使用十六进制编辑器检查您的文件。

检查您的控制台(又名终端 window,又名命令行)如何配置来处理这些控制字符。您使用的是默认设置吗?

您必须按照操作系统的约定始终如一地使用这些控制字符。

如果您在 Microsoft 操作系统上使用 telnet 或 ssh 到 Unix 计算机上的 运行 代码,这会使事情变得更加复杂。