Python在管道输入中表现得很奇怪

Python在管道输入中表现得很奇怪,python,python-3.5,Python,Python 3.5,由于代码中存在一些奇怪的行为,我在从python程序中的.txt文件读取输入时遇到问题。我运行的python脚本如下所示: python3 file.py < input.txt inDATA = '' for i in range(7): tmp = str(input()) print(tmp) inDATA = "X" + inDATA + tmp print(inDATA) print(inDATA) 我的输入文件(input.txt)如下所

由于代码中存在一些奇怪的行为,我在从python程序中的.txt文件读取输入时遇到问题。我运行的python脚本如下所示:

python3 file.py < input.txt
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

1
X1
2
2X1
3
3XX1
4
4XXX1
5
5XXXX1
6
6XXXXX1
7
7XXXXXX1
7XXXXXX1
有人知道是什么导致了这种行为吗

我还尝试在python2中使用
python file.py
(并将input()更改为raw_input())来运行它,但没有效果


编辑:这个问题不是“如何从linux程序逐行将输入管道传输到python?”的重复问题,这个问题是关于如何管道的,另一方面,这个问题是关于为什么从文件管道传输代码时会出现奇怪的行为

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

在print语句中使用字符串之前,先在字符串的末尾添加以下内容。 +“\r” +“\n”

读取后,使用十六进制编辑器检查文件

检查控制台(又名终端窗口,又名命令行)如何配置以处理这些控制字符。您是否使用默认设置

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


如果在例如Microsoft操作系统上使用telnet或ssh在例如Unix计算机上运行代码,则会使问题进一步复杂化

这是一个回车和换行的问题,但您没有提供足够的线索来确定确切的问题

在print语句中使用字符串之前,先在字符串的末尾添加以下内容。 +“\r” +“\n”

读取后,使用十六进制编辑器检查文件

检查控制台(又名终端窗口,又名命令行)如何配置以处理这些控制字符。您是否使用默认设置

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


如果在例如Microsoft操作系统上使用telnet或ssh在例如Unix计算机上运行代码,则会使问题进一步复杂化

@OTTTO的可能重复项我不这么认为,不过,我会查看一下,以确保:)Thxi如果您记录
repr(tmp)
,那么差异(输入之间的差异——即您的文件包含的数据与您在键盘上输入的数据完全不同)将是显而易见的。@CharlesDuffy好的,我来看看,thx@查理·达菲,谢谢!我的问题是我的文件在每一行的末尾都有一个\r,所以我做了一些快速的谷歌搜索,发现我必须使用
.rstrip()
来删除它:)可能是@OTTTO的重复,我不这么认为,但是,我会查看它以确保:)thxIf您记录
repr(tmp)
,区别是什么(在输入之间——即,您的文件所包含的数据与您在键盘上输入的数据完全不同)将是显而易见的。@CharlesDuffy好的,我来看看,thx!@CharlesDuffy谢谢!我的问题是我的文件在每行末尾都有一个\r,所以我快速搜索了一下,发现我必须使用
.rstrip()
要删除它:)谢谢,这是一个回车问题。谢谢,这是一个回车问题。