我注意到使用 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并被创建。