У меня есть простой python script line_printer.py
:
import fileinput
i = 1
for line in fileinput.input():
print 'Line', str(i), ':', line.strip()
i+=1
Я пытаюсь понять, как данные о трафике из команды echo
на этот script влияют на результат по сравнению с чтением данных из файла.
Рассмотрим следующий вызов и вывод:
$ echo -e "chicken\ncow\npig"
chicken
cow
pig
$
Это для меня выглядит как echo
добавило invisble \n
после "g" в свиньи. Итак, как получилось, когда я звоню:
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 или из файла? Лучшее, что я могу сказать, как stdin (от echo
), так и файл (от some_lines.txt
) заканчиваются на \n
, поэтому я либо ожидал, что вывод обоих включит Line 4 :
, либо вывод не будет включите его.