在IPython中的子进程中使用input(),从%%script py-2开始

在IPython中的子进程中使用input(),从%%script py-2开始,python,ipython,Python,Ipython,以下代码使用cell magic在IPython中的子进程中运行Python 2: %%script py -2 print 'foo' 它按预期工作(即,它打印“foo”) 但当我尝试在子流程中获取用户输入时,它失败了: %%script py -2 input('foo? ') 以下是输出: foo? Traceback (most recent call last): File "<stdin>", line 1, in <module&g

以下代码使用cell magic在IPython中的子进程中运行Python 2:

%%script py -2
print 'foo'
它按预期工作(即,它打印“foo”)

但当我尝试在子流程中获取用户输入时,它失败了:

%%script py -2
input('foo? ')
以下是输出:

foo? Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
EOFError: EOF when reading a line
foo?回溯(最近一次呼叫最后一次):
文件“”,第1行,在
EOF:读取一行时的EOF
知道为什么输入在子流程中不起作用吗

如果有帮助,这里有一个屏幕抓图:


我猜子流程中的
stdin
有些奇怪(它似乎是关闭的),因此这可能会绕过:

>>> %%script python
... stdin = open('/dev/tty')
... line = stdin.readline()
... print 'input:', line  # python 2.7.6 is default on my sys
... 
yay!
input: yay!

以上是在IPython 1.2.1和Python 3.4.0(使用%doctest_模式)上运行时的输出。

谢谢,@andré。正如您在IPython控制台中所说的那样(出于某种原因,IPython笔记本中没有),但它与
input()
不同。我的目的是演示input()在Python2(计算输入字符串)和Python3(不计算输入字符串)中的工作方式之间的区别。另外,对于在Windows上尝试此操作的其他人,您需要将
stdin
设置为
open('CON:')
。确实,这是一种黑客攻击,不太灵活/可移植。