2016-03-19 41 views
1

我已經在Python中創建了一個庫。我可以在Linux或Windows上使用它。我希望能夠從大多數非Python腳本/程序中調用它。理想情況下,如果可能的話,我想要一個跨平臺的選項,但Linux現在是最重要的。無論如何,除了通過命令提示符界面以及對腳本進行系統調用/ ShellExec風格的使用之外,還有其他的方法可以實現嗎?例如,如果這是所有基於Windows的編程,例如,我可以創建一個dll ...如果我可以直接從Linux中的php和Windows中的C++中直接使用庫,那麼這將是非常棒的。任何想法?從其他語言調用Python的通用(或最佳)選項?

回答

0

撥打電話是一個廣泛的描述,解決方案取決於您是否要撥打和接聽這些電話的輸出。如果你這樣做,你可以使用JSON在PHP和Python之間遵循一個非常通用的解決方案。對於php: 注意:不是我的代碼,請參閱原始here

// This is the data you want to pass to Python 
    $data = array('as', 'df', 'gh'); 

    // Execute the python script with the JSON data 
    $result = shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data))); 

    // Decode the result 
    $resultData = json_decode($result, true); 

    // This will contain: array('status' => 'Yes!') 
    var_dump($resultData); 

而對於Python的:

import sys, json 

    # Load the data that PHP sent us 
    try: 
     data = json.loads(sys.argv[1]) 
    except: 
     print "ERROR" 
     sys.exit(1) 

    # Generate some data to send to PHP 
    result = {'status': 'Yes!'} 

    # Send it to stdout (to PHP) 
    print json.dumps(result) 

顯然,如果你不需要這個在PHP中使用systempopen可能就足夠了。同時檢查:

Question 1 Question 2

+0

謝謝。我確實想要在兩個方向上傳遞數據。答案的麻煩在於它實際上使用系統調用/ shellex,這是我想到的即時解決方案,但是我正在尋找替代方案。不過有趣的是,你的一個鏈接包含一個到http://www.csh.rit.edu/~jon/projects/pip/的鏈接,它至少在python/php中是有趣的可能性(儘管不是「通用」解)。 – BuvinJ

+0

也許,沒有避免爲我想要的命令驅動接口... – BuvinJ

+0

它必須在某些時候發生,除非你有一些方法將Python語法轉換爲php或者你已經發布的鏈接以某種方式使擴展打開Python解釋器(我猜,這將是新類型的噩夢,一旦你想開始將庫加載到你的Python庫)。無論如何,鏈接似乎是更新和項目活動。你爲什麼不直接聯繫製作它的人,並詢問它是否適用於你想要做的事情? – armatita

1

既然你說你不想使用命令行界面,跨平臺訪問服務的邏輯的答案是使用Web API。而且,通過這樣做,API的使用者可以在與提供者不同的操作系統上運行。

我在設置這個blog post之前設置了API。有一個更完整的Python選項列表here

+0

我認爲這是一個很好的解決方案,並且爲你提供了最好的解決方案。它避免了一個命令行界面,避免了子進程,並且是跨平臺的!我沒有包括我的直接用例的詳細信息,但基本上,我正在開發的這個特定的庫涉及一系列私有服務器到服務器的安全https帖子(和其他Web協議)。我想要一個客戶端,它提供了一個庫服務,將它與帖子,ssl證書,http代碼等隔離開來。所以,這個解決方案對於這個目的將是多餘的和愚蠢的。(不是你的錯,我沒有包括所有這些細節!) – BuvinJ

+0

嗯,我想到https://docs.python.org/2/extending/embedding.html,但你說:「從大多數情況下調用它...腳本/程序「。嵌入式python也只適用於你編寫客戶端的情況。另一種選擇是創建一個目錄,然後讓客戶端將請求放入其中,然後查找響應文件。只有unix,有命名管道。 –

+0

另一個好建議。我認爲,如果我只想在Windows中實現這一點,我可能會將Python嵌入到C++ dll中。我相信一個DLL可以兼容所有其他MS技術,例如C#,VB等等,但是這對Linux沒有幫助,除非有一個與Linux相當的dll? – BuvinJ

相關問題