我的要求是在scala和python之间形成一个集成。我如何开始" python.exe"并从scala执行python命令。
我已尝试过以下链接中的代码段,但它似乎无法正常工作。你能帮帮我吗?
How does the “scala.sys.process” from Scala 2.9 work?
提前致谢!
答案 0 :(得分:1)
流程API非常人为,而且非常可怕(=没有)记录。我经常回到Java API,因为它对我来说更有意义。
这是一个例子。覆盖os
变量以“存储”输出流似乎是一种愚蠢的方法(在Java中,您只需查询流程中的输出流)。也许API的设计者可以启发我们的想法。可能有更优雅的解决方案:
import sys.process._
var os: java.io.OutputStream = _
val python = Process(Seq("python","-i")).run(BasicIO.standard(os = _) /* WTF? */)
def pushLine(s: String): Unit = {
os.write(s"$s\n".getBytes("UTF-8"))
os.flush()
}
pushLine("1+1")
pushLine("exit()")
答案 1 :(得分:1)
我最近不得不承担一个非常类似的项目。我不需要只执行python脚本并解析输出,而是需要启动一些python代码并向其发送命令以执行和响应。在尝试通过STDIN / STDOUT进行此通信一段时间后,我选择使用ZeroMQ作为我的互操作通信通道
通过这样做,代码的执行变得像
一样简单val process = s"python commandRunner.py $port".run()
其中$port
是我的代码正在侦听python代码通过ZeroMQ连接回我的端口,而commandRunner
脚本运行一个简单的ZeroMQ事件循环