0

たとえば、Scala プロセス内から Python 対話型インタープリターを呼び出し、ユーザーがサブプロセスと完全に対話できるようにするダミー スクリプト (実際のスクリプトを作成する可能性がある) を作成したいと思います。つまり、子プロセスの stdin/stdout/stderr は、親 (Scala) プロセスの stdin/stdout/stderr に接続する必要があります。私は無駄に次を使用してみました:

#!/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 に答える