Я заметил следующее, используя Python 2.5.2 (не происходит с использованием 2.7):
#!/usr/bin/python
import sys
for line in sys.stdin:
print line,
Вывод:
$ echo -e "one\ntwo\nthree" | python test.py
$ one
$ two
$ three
как ожидалось. Однако, если я импортирую subprocess
в этот script:
#!/usr/bin/python
import sys
import subprocess
for line in sys.stdin:
print line,
Вывод:
$ echo -e "one\ntwo\nthree" | python test.py
$ two
$ three
Что случилось с первой строкой вывода?
Update:
Я думаю, что я, возможно, обнаружил корень проблемы. В моем cwd
у меня был файл с именем time.py
. A time.pyc
создается каждый раз при запуске импортированного script с subprocess
, предполагая, что ./time.py
также импортируется. script работает нормально, если я удалю файлы .pyc
и time.py
; однако все еще возникает вопрос, почему импорт subprocess
приведет к тому, что ./time.py
будет импортирован?
Я сузил его еще дальше до точной строки в time.py
, что вызывает странное поведение. Я разделил рабочий каталог и содержимое файла на то, что влияет на вывод:
test.py
#!/usr/bin/python
import sys
import subprocess
for line in sys.stdin:
print line,
time.py
#!/usr/bin/python
import sys
for line in sys.stdin:
hour = re.search(r'\b([0-9]{2}):', line).group(1)
Запуск test.py
с любыми входными результатами в первой строке вывода и time.pyc
.