2015-07-21 82 views
1

我的要求是形成scala和python之間的集成。如何啓動「python.exe」並從scala執行python命令。如何啓動「python.exe」作爲scala中的子進程?

我已經嘗試了下面的鏈接的代碼片段,但它似乎並沒有工作。你能幫我嗎?

How does the 「scala.sys.process」 from Scala 2.9 work?

先謝謝了!

+0

你*有*使用CPython嗎?爲什麼不使用Jython並完成它? –

+0

感謝您的回覆@Jorg ....由於我面對'jep'庫的一些問題,我轉向了這個過程。還有其他選擇嗎? –

+2

@ yoganathank:「它似乎沒有工作」**如何**?請提供您使用的確切代碼以及錯誤的輸出。 –

回答

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

我最近不得不進行一個非常類似的項目。我不需要執行python腳本並解析輸出,而需要啓動一些python代碼併發送命令來執行和迴應。一段時間後,嘗試做了標準輸入/輸出這種交流,我選擇了使用ZeroMQ爲我的互操作通信信道

通過這樣做,代碼的執行變得那樣簡單

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

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

+0

是的,ZeroMQ是一個非常強大的功能(...和快速習慣)trully分佈式計算框架[+1 Arne。 – user3666197

相關問題