2012-09-02 71 views
0

如何從ruby中調用shell中運行的python。其實我需要紅寶石與shell中的python下運行的一些應用程序進行通信。所以我需要ruby在cmd中調用python(命令'python'),然後在python環境下導入庫(命令'import xyz'),並運行此導入庫的運行函數(例如'xyz.showdate()') ,並得到當然的結果。從紅寶石(導軌)調用python shell應用程序

我嘗試使用IO.popen和Open3.popen3函數來實現這一點,但我做錯了什麼。

其實我在軌道上使用jruby,但它應該與紅寶石一樣,我猜。

+0

嗯...... python庫在Jython下工作嗎?然後,您可以像調用Java類一樣調用它,從而避免了每次調用時本機釋放並運行另一個解釋器的開銷。 –

回答

2

您可能並不真的想要這樣做,這會讓您的ruby腳本過分複雜,因爲您可能直接在ruby中獲得結果。

不過,若你決定走那條路,你可以創建一個Python腳本,做你所需要的,並從Ruby腳本運行:

# python-script.py 
import xyz 
if __name__ == '__main__': 
    xyz.showdate() 

這樣,你會安排讓你的Ruby腳本調用以下命令:

python path/to/python-script.py 

只要您的xyz.showdate打印日期,您可以收集標準輸出以獲得結果。

但是,這可能不是一個好主意。

+0

那麼有沒有其他的方式來建立ruby和python shell之間的通信?如果我考慮長期使用,那麼XML-RPC如何?由於客戶端 - 服務器架構,速度很慢嗎? – mantonn

+0

它可能*較慢*,但絕對不*較慢*。此外,使用運行你的xml rpc服務器的python守護進程將節省解釋器/應用程序的啓動開銷,如果你有一個大的選擇應用程序加載,這可能成爲一個問題。另外,這顯然是更爲理想的設計。 –

+0

謝謝您的建議 – mantonn