Python 2.7:从stdin读取内容后使用input / raw_input

时间:2016-06-23 02:52:49

标签: python python-2.7

我的程序首先从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')运行。

如果您有更好的解决方案,请与我们联系。

0 个答案:

没有答案