使用python从重定向的stdin读取文件

时间:2014-12-05 14:24:47

标签: python shell stdin

我正在尝试通过命令行读取重定向stdin的文本文件的内容,并在接收方必须将其组装回原始格式时通过Internet发送。

例如:

$ python test.py < file.txt

我尝试阅读该文件并使用受link启发的以下代码将其重新组装:

for line in sys.stdin:
  stripped = line.strip()
  if not stripped: break
  result = result + stripped

print "File is beeing copied"
file = open("testResult.txt", "w")
file.write(result)
file.close()
print "File copying is complete!"

但是这个解决方案可以工作,只要我在我的文件中有一个空行(两个&#39; \ n&#39;一个接一个),如果我有,我的循环中断和文件阅读结束。我怎么能从stdin读到我到达&lt;&gt;重定向的文件?

3 个答案:

答案 0 :(得分:5)

你为什么要查看数据:

result = sys.stdin.read()

答案 1 :(得分:3)

而不是打破,你只想continue到下一行。迭代器到达文件末尾时会自动停止。

import sys
result = ""
for line in sys.stdin:
    stripped = line.strip()
    if not stripped:
        continue
    result += stripped

答案 2 :(得分:2)

line.strip()正在从读取行中删除尾随换行符。

如果您想要该换行符,那么您不应该这样做我不会想(您的输出文件是否有输入换行符)?

if stripped位正在寻找一个空白行,并且原来是循环的终止特征。

但这不是你的终止标记。你不想在那里停下来。所以不要。

sys.stdin到达输入的末尾(EOF)时,循环将自行完成。

删除line.strip() drop if not stripped: breakresult = result + stripped替换为result = result + line,然后将其写入文件以获得一个简单的(虽然可能很昂贵)cp脚本。

如果你想对它们做一些事情(取决于你的目标),可能有更有效的方法从标准输入读取所有行。