我的程序首先从stdin读取一些内容。完成后,要求用户输入与下面显示的代码类似的内容:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
a = sys.stdin.readline()
print 'stdin is ' + a
b = raw_input("Input: ")
print 'user input: ' + b
当我运行echo "111" | ./main.py
时
它输出:
stdin is 111
Input: Traceback (most recent call last):
File "./main.py", line 9, in <module>
b = raw_input("Input: ")
EOFError: EOF when reading a line
知道它是如何起作用的吗?
ENV: 使用OSX的Python 2.7.11(默认,2015年12月5日,14:44:53)
谢谢!
编辑: 为了消除混淆,代码现在改为:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vim: set noexpandtab tabstop=2 shiftwidth=2 softtabstop=-1 fileencoding=utf-8:
import sys
a = ''
for line in sys.stdin:
a += line
print 'stdin is ' + a
b = raw_input("Input: ")
EDIT2:
Try (echo -e "something" && cat) | ./main.py
,但没有运气
EDIT3: 我能想到的最好的方法是传递文件描述符而不是stdin:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vim: set noexpandtab tabstop=2 shiftwidth=2 softtabstop=-1 fileencoding=utf-8:
import sys
a = ''
with open(sys.argv[1]) as f:
for line in f:
a += line
print 'stdin is ' + a
b = raw_input("Input: ")
以./main1.py <(echo 'fasfasfasfa')
运行。
如果您有更好的解决方案,请与我们联系。