Python通过stdin读取多个文件

Python通过stdin读取多个文件,python,Python,我想通过管道将多个文件传输到python脚本,但我不知道如何做到这一点 import sys file1 = sys.stdin.read() file2 = sys.stdin.read() print print "You entered: " + file1 print print print "You entered: " + file2 通过键入input执行脚本工作正常,例如: python input.py FIRST SECOND You entered: FIRST

我想通过管道将多个文件传输到python脚本,但我不知道如何做到这一点

import sys

file1 = sys.stdin.read()
file2 = sys.stdin.read()

print
print "You entered: " + file1
print
print
print "You entered: " + file2
通过键入input执行脚本工作正常,例如:

python input.py
FIRST
SECOND

You entered: FIRST

You entered: SECOND
如果我将一个文件通过管道传输到脚本,它将只检索其中一个输入:

cat file1.txt file2.txt | python input.py

You entered: This is file 1
This is file 2

You entered:

我的第一个假设是它与EOF有关?

读取调用本身不是行缓冲的。它读取的最大值为
X
KB(我认为
X
在大多数系统上大约是4K,但这里的确切数字并不重要),或者直到没有剩余的内容可读取为止

当您通过管道传输文件时,您将立即显示完整的输入。因此,第一个
read
将第一个
X
KB读入


当你在终端上打字时,第一个
读的
会咕噜咕噜地响,直到没有东西可读为止;你还没有打出来。第二次读取等待,直到有东西要读取(当您点击回车键时),然后读取
X
更多KB。

cat
con
cat
将多个文件启用为一个文件,并将其刷新到标准输出(默认情况下)
read
加载数据,直到没有更多的文件要读取(即直到
EOF
)您需要保持每个文件的不同吗?
cat
的手册页状态为:cat--连接和打印文件。这里的连接部分是绊倒你的地方
stdin
是一个文件对象,并且永远不会发送
EOF
s。除非您自己插入一个特殊标记,否则您无法对管道执行您想要执行的操作。在命令行上使用文件名。我真的很惊讶你能用手动键入来实现这一点,我猜当连接到终端时,
。read()
会在终端是一个没有结束的流时尽早返回。我只是一直在胡思乱想,想知道是否有办法做到这一点。我想尝试将它们分开,因为如果可能的话,这更有利于学习。我不确定管道是否能够处理这个问题,这就是为什么我开始这样做的原因。