我有一個簡單的Python腳本line_printer.py
:Bash/Python:`echo`命令在作爲另一個命令的輸入時插入換行符嗎?
import fileinput
i = 1
for line in fileinput.input():
print 'Line', str(i), ':', line.strip()
i+=1
我想了解從echo
命令該腳本管道數據如何影響結果與從文件中讀取數據。
考慮下面的呼叫和輸出:
$ echo -e "chicken\ncow\npig"
chicken
cow
pig
$
這對我來說看起來像echo
已經附加在豬中的「G」後invisble \n
。那麼,爲什麼當我打電話:
echo -e "chicken\ncow\npig" | python line_printer.py
我得到:
Line 1 : chicken
Line 2 : dog
Line 3 : cow
的輸出,而不是:
Line 1 : chicken
Line 2 : dog
Line 3 : cow
Line 4 :
起初我還以爲Python的fileinput
模塊的行爲可能是放棄文件中的最後一行,如果它是空白的。但是當我嘗試使用文件some_lines.txt
的內容:
chicken
dog
cow
<blank line>
爲輸入:
python line_printer.py some_lines.txt
我得到的輸出是:
Line 1 : chicken
Line 2 : dog
Line 3 : cow
Line 4 :
那麼,爲什麼line_printer.py
給出不同的結果在輸入取決於它是源於stdin還是源自一個文件?最好我可以告訴,兩個標準輸入(從echo
)和文件(從some_lines.txt
)以\n
完成,所以我要麼期望兩者的輸出包括Line 4 :
或輸出既不包括它。
'some_lines.txt'以* two *'\ n'結尾:'cow'和空行(它本身就是一個單獨的'\ n')。 – robertklep