Python使用管道输入表现得很奇怪

时间:2017-10-20 01:34:57

标签: python python-3.5

由于我的代码中出现了一些奇怪的行为,我无法在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()),但它没有效果。

编辑:这个问题不是“如何从linux程序逐行输入到python的输入?”的问题,该问题询问如何来管道,另一方面,这个问题是关于为什么代码在从文件管道传输时表现得很奇怪

1 个答案:

答案 0 :(得分:2)

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

通过在打印语句中使用它们之前将以下内容添加到字符串末尾进行实验。 +&#39; \ r&#39; +&#39; \ n&#39;

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

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

根据操作系统的惯例,您必须始终如一地使用这些控制字符。

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