我通过Popen()启动sbt,我的python进程stdin读取不起作用。 这是一个例子: 在第一行我启动Popen,在第二行我尝试用箭头键浏览历史记录。打印^ [[A。
$ python
Python 2.7.10 (default, Jul 13 2015, 12:05:58)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess; f = open("/dev/null", "rw"); subprocess.Popen(["sbt"], stdout=f, stderr=f, stdin=f)
<subprocess.Popen object at 0x10fc03950>
>>> ^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[Aimport subprocess; f = open("/dev/null", "rw"); subprocess.Popen(["sbt"], stdout=f, stderr=f, stdin=f)
这似乎只发生在sbt上。 知道为什么以及如何绕过这种行为?
由于
答案 0 :(得分:0)
我的猜测是,当没有伪tty与用户交互时,sbt
行为不端(可能是因为jline
)。
因此,让我们使用python模块在伪tty中运行命令。通过pip({3.}} for Python 3.x)安装pexpect
。
然后,运行以下命令:
pip3 install pexpect
在Python 3.4.3(Gentoo Linux)中测试并运行。