0

我想创建一个虚拟脚本(可能会编写一个真实的脚本),例如从 Scala 进程中调用 Python 交互式解释器,并让用户与子进程完全交互;即子进程的标准输入/标准输出/标准错误应该连接到父(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~$ 

知道为什么会发生这种情况以及如何使其按预期工作吗?

4

1 回答 1

1

你没有给 python 一个(伪)tty。你只是给它标准输入(可能还有标准输出)。

所以python是在非交互模式下运行的。

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

于 2014-12-04T17:35:41.277 回答