我注意到使用 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
到这个脚本:
#!/usr/bin/python
import sys
import subprocess
for line in sys.stdin:
print line,
输出:
$ echo -e "one\ntwo\nthree" | python test.py
$ two
$ three
第一行输出发生了什么?
更新:
我想我可能已经发现了问题的根源。我time.py
的cwd
. time.pyc
每次我运行导入的脚本时都会创建一个,subprocess
这表明./time.py
它也在被导入。如果我删除.pyc
和time.py
文件,脚本将正常运行;但是,仍然存在一个问题,为什么subprocess
进口也会导致./time.py
进口?
我已将其进一步缩小到time.py
导致奇怪行为的确切行。我已将工作目录和文件内容剥离为影响输出的内容:
测试.py
#!/usr/bin/python
import sys
import subprocess
for line in sys.stdin:
print line,
时间.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
并被创建。