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 计算机上的 运行 代码,这会使事情变得更加复杂。
由于我的代码中存在一些奇怪的行为,我无法从 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 计算机上的 运行 代码,这会使事情变得更加复杂。