我想创建一个虚拟脚本(具有编写真实生活脚本的前景),它可以从Scala进程中调用Python交互式解释器,并让用户与子进程完全交互。即,子进程的stdin / stdout / stderr应该连接到父进程(Scala)的进程。我尝试使用以下内容无济于事:
#!/usr/bin/env scala -savecompiled
import sys.process._
stringToProcess("python").run(BasicIO.standard(connectInput = true)).exitValue
然而,虽然它似乎确实成功运行了python
子流程,但我唯一的互动是Ctrl-C
:
~$ ./scalashelltest.scala
foo
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyboardInterrupt
如果立即按Ctrl-C,我甚至无法获得该输出:
~$ ./scalashelltest.scala
^C~$
知道为什么会这样,以及如何让它按预期工作?
答案 0 :(得分:1)
你没有给python一个(伪)tty。你只是给它stdin(可能是stdout)。
所以python以非交互模式运行。
使用-i
标志运行python将强制它使用提示即使没有tty但更正确的修复可能会找到可以创建(伪)tty并运行应用程序的scala / java库在它。