使用python subprocess.Popen()运行sbt时stdin读取阻塞

时间:2015-09-10 11:26:52

标签: python python-2.7 sbt stdin popen

我通过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上。 知道为什么以及如何绕过这种行为?

由于

1 个答案:

答案 0 :(得分:0)

我的猜测是,当没有伪tty与用户交互时,sbt行为不端(可能是因为jline)。

因此,让我们使用python模块在伪tty中运行命令。通过pip({3.}} for Python 3.x)安装pexpect

然后,运行以下命令:

pip3 install pexpect

在Python 3.4.3(Gentoo Linux)中测试并运行。