2017-10-20 25 views
0

由于我的代码中存在一些奇怪的行为,我无法从python程序中的.txt文件读取输入。我跑我的python脚本是这样的: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一行行?”,这个问题问了重复约如何来管,这个问题,而另一方面,是大约为什么代码的行为很奇怪,当从一个文件管道

+0

可能重复[如何管道输入到python逐行从Linux程序?](https://stackoverflow.com/questions/17658512/how-to-pipe-in​​put-to-python-line-by- line-from-linux-program) – 0TTT0

+0

@OTTTO我不这么认为,但是,我会看看它只是为了确保:) thx – mocqoro

+1

如果你记录'repr(tmp)',输入 - 也就是说,您的文件*包含的数据与您在键盘上输入的数据不同)将是显而易见的。 –

回答

2

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

在打印语句中使用它们之前,将以下内容添加到字符串的末尾。 ' +'\ r' +'\ n'

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

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

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

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

+0

谢谢,返回问题。 – mocqoro