在Scala(脚本)中执行子命令并让它“接管”

时间:2014-12-04 16:00:01

标签: shell scala command-line process scala-script

我想创建一个虚拟脚本(具有编写真实生活脚本的前景),它可以从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~$ 

知道为什么会这样,以及如何让它按预期工作?

1 个答案:

答案 0 :(得分:1)

你没有给python一个(伪)tty。你只是给它stdin(可能是stdout)。

所以python以非交互模式运行。

使用-i标志运行python将强制它使用提示即使没有tty但更正确的修复可能会找到可以创建(伪)tty并运行应用程序的scala / java库在它。