簡體   English   中英

如何在scala中將“ python.exe”作為子進程啟動?

[英]How to start “python.exe” as subprocess in scala?

我的要求是在scala和python之間形成一個集成。 如何啟動“ python.exe”並從scala執行python命令。

我已經嘗試了以下鏈接中的代碼段,但似乎沒有用。 你能幫我這個忙嗎?

Scala 2.9中的“ scala.sys.process”如何工作?

提前致謝 !

流程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代碼並向其發送命令以執行並響應。 經過一段時間嘗試通過STDIN / STDOUT進行此通信后,我選擇使用ZeroMQ作為我的互操作通信通道

這樣,代碼的執行變得非常簡單

val process = s"python commandRunner.py $port".run()

$port是我的代碼正在偵聽python代碼以通過ZeroMQ連接回我的commandRunner ,而commandRunner腳本運行一個簡單的ZeroMQ事件循環

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM