我正在尝试通过命令行读取重定向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;重定向的文件?
答案 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: break
将result = result + stripped
替换为result = result + line
,然后将其写入文件以获得一个简单的(虽然可能很昂贵)cp
脚本。
如果你想对它们做一些事情(取决于你的目标),可能有更有效的方法从标准输入读取所有行。