2014-12-05 107 views
5

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

例如:

$ 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!" 

但只要使用这种解决方案,因为我DON '我的文件中有一个空行(两个'\ n'一个接一个),如果我有,我的循环会中断,文件读取结束。如何从stdin中读取文件,直到达到文件的<>重定向?

+1

'file.write(sys.stdin.read())' – 2014-12-05 15:03:32

回答

5

你为什么连看数据:

result = sys.stdin.read() 
+0

谢谢!这正是我所需要的:) – user3717551 2014-12-06 07:14:03

3

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

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

谢谢您的回答,它解决了我的问题。 – user3717551 2014-12-06 07:06:32

2

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

如果你想要这个新行,那么你不应该这样做,我不认为(你的输出文件是否有输入新行)?

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

虽然这不是您的终止标记。你不想停在那里。所以不要。

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

line.strip()下降if not stripped: break取代result = result + strippedresult = result + line,然后写在文件中得到一个简单的(虽然可能贵)cp脚本。

如果你想对他们做些什么(根据你的目标),有可能更有效的方法来读取标准输入的所有行。

+0

是的你是对的,我剥离是不需要的(因为它改变了它阅读的文本,这不是我的目标)。事实上,“William Pursell”建议采用更“有效的方式来做到这一点”。 – user3717551 2014-12-06 07:13:18