我的要求是形成scala和python之間的集成。如何啓動「python.exe」並從scala執行python命令。如何啓動「python.exe」作爲scala中的子進程?
我已經嘗試了下面的鏈接的代碼片段,但它似乎並沒有工作。你能幫我嗎?
How does the 「scala.sys.process」 from Scala 2.9 work?
先謝謝了!
我的要求是形成scala和python之間的集成。如何啓動「python.exe」並從scala執行python命令。如何啓動「python.exe」作爲scala中的子進程?
我已經嘗試了下面的鏈接的代碼片段,但它似乎並沒有工作。你能幫我嗎?
How does the 「scala.sys.process」 from Scala 2.9 work?
先謝謝了!
流程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()")
我最近不得不進行一個非常類似的項目。我不需要執行python腳本並解析輸出,而需要啓動一些python代碼併發送命令來執行和迴應。一段時間後,嘗試做了標準輸入/輸出這種交流,我選擇了使用ZeroMQ爲我的互操作通信信道
通過這樣做,代碼的執行變得那樣簡單
val process = s"python commandRunner.py $port".run()
其中$port
是端口上我的代碼正在偵聽python代碼通過ZeroMQ連接回我,而commandRunner
腳本運行一個簡單的ZeroMQ事件循環
是的,ZeroMQ是一個非常強大的功能(...和快速習慣)trully分佈式計算框架[+1 Arne。 – user3666197
你*有*使用CPython嗎?爲什麼不使用Jython並完成它? –
感謝您的回覆@Jorg ....由於我面對'jep'庫的一些問題,我轉向了這個過程。還有其他選擇嗎? –
@ yoganathank:「它似乎沒有工作」**如何**?請提供您使用的確切代碼以及錯誤的輸出。 –