我已經在Python中創建了一個庫。我可以在Linux或Windows上使用它。我希望能夠從大多數非Python腳本/程序中調用它。理想情況下,如果可能的話,我想要一個跨平臺的選項,但Linux現在是最重要的。無論如何,除了通過命令提示符界面以及對腳本進行系統調用/ ShellExec風格的使用之外,還有其他的方法可以實現嗎?例如,如果這是所有基於Windows的編程,例如,我可以創建一個dll ...如果我可以直接從Linux中的php和Windows中的C++中直接使用庫,那麼這將是非常棒的。任何想法?從其他語言調用Python的通用(或最佳)選項?
回答
撥打電話是一個廣泛的描述,解決方案取決於您是否要撥打和接聽這些電話的輸出。如果你這樣做,你可以使用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)
既然你說你不想使用命令行界面,跨平臺訪問服務的邏輯的答案是使用Web API。而且,通過這樣做,API的使用者可以在與提供者不同的操作系統上運行。
我認爲這是一個很好的解決方案,並且爲你提供了最好的解決方案。它避免了一個命令行界面,避免了子進程,並且是跨平臺的!我沒有包括我的直接用例的詳細信息,但基本上,我正在開發的這個特定的庫涉及一系列私有服務器到服務器的安全https帖子(和其他Web協議)。我想要一個客戶端,它提供了一個庫服務,將它與帖子,ssl證書,http代碼等隔離開來。所以,這個解決方案對於這個目的將是多餘的和愚蠢的。(不是你的錯,我沒有包括所有這些細節!) – BuvinJ
嗯,我想到https://docs.python.org/2/extending/embedding.html,但你說:「從大多數情況下調用它...腳本/程序「。嵌入式python也只適用於你編寫客戶端的情況。另一種選擇是創建一個目錄,然後讓客戶端將請求放入其中,然後查找響應文件。只有unix,有命名管道。 –
另一個好建議。我認爲,如果我只想在Windows中實現這一點,我可能會將Python嵌入到C++ dll中。我相信一個DLL可以兼容所有其他MS技術,例如C#,VB等等,但是這對Linux沒有幫助,除非有一個與Linux相當的dll? – BuvinJ
- 1. 使用Rails或其他語言
- 2. Python langdetect:只在一種語言或其他語言之間進行選擇
- 3. 使用Python或其他與IIOP腳本語言
- 4. 使用Python或其他語言生成Dex文件
- 5. Pylatex使用其他語言
- 6. 從SQL Server中調用其他語言的UDF
- 7. 如何在其他語言中使用restrict選項
- 8. 可能從其他編程語言(python/C#)使用Mathematica?
- 9. 編程語言如何調用用其他語言編寫的代碼?
- 10. 可以從C或其他語言空間調用一個採用* args/** kwargs的Python函數嗎?
- 11. 適用於OpenGL /通用圖形的最佳動態語言
- 12. Facebook應用的最佳語言
- 13. atoi()其他語言
- 14. 「教」Python其他語言(TTS說...)HowTo?
- 15. 使用Python或其他嵌入式腳本語言部署應用程序
- 16. java最佳調試選項
- 17. 使用Sencha Touch調用其他API的最佳方式
- 18. 使用PHP或任何其他語言獲取引用鏈接
- 19. 其他語言的自動完成選項
- 20. 爲Haskell(和其他語言)打包C++庫的選項
- 21. 用Unity開發最佳語言?
- 22. 如何將tesseract中的語言首選項從英語更改爲其他語言?
- 23. onChange或其他選項?
- 24. 引用類或其他對象的其他實例的最佳方法?
- 25. 控制網頁槽python或任何其他編程語言
- 26. 成本用FORTRAN函數(或任何其他語言)的
- 27. C#(或其他語言)代表的使用
- 28. 如何啓用Python以外的其他語言?
- 29. 用PHP/PYTHON /其他編程語言收集Visual SVG的力量
- 30. python - 使用os.walk無法檢測到其他語言的鏈接
謝謝。我確實想要在兩個方向上傳遞數據。答案的麻煩在於它實際上使用系統調用/ shellex,這是我想到的即時解決方案,但是我正在尋找替代方案。不過有趣的是,你的一個鏈接包含一個到http://www.csh.rit.edu/~jon/projects/pip/的鏈接,它至少在python/php中是有趣的可能性(儘管不是「通用」解)。 – BuvinJ
也許,沒有避免爲我想要的命令驅動接口... – BuvinJ
它必須在某些時候發生,除非你有一些方法將Python語法轉換爲php或者你已經發布的鏈接以某種方式使擴展打開Python解釋器(我猜,這將是新類型的噩夢,一旦你想開始將庫加載到你的Python庫)。無論如何,鏈接似乎是更新和項目活動。你爲什麼不直接聯繫製作它的人,並詢問它是否適用於你想要做的事情? – armatita