2012-01-24 54 views
18

出於某種原因,我必須運行一個php腳本來從Python獲取圖像。由於php腳本非常大,而且它不是我的,所以需要花幾天時間才能找到正確的算法並將其轉換爲python。在Python中執行php代碼

我不知道是否有任何方法可以運行php腳本,只有少數參數,它返回一個圖像,在python中。

回答

32

示例代碼:

import subprocess 

# if the script don't need output. 
subprocess.call("php /path/to/your/script.php") 

# if you want output 
proc = subprocess.Popen("php /path/to/your/script.php", shell=True, stdout=subprocess.PIPE) 
script_response = proc.stdout.read() 
+2

這是從http://mail.python.org/pipermail/tutor/2009-October/071973.html – Alvin

+7

粘貼的代碼,它是不正確的。第一次調用不適用於POSIX系統。改用'subprocess.call([「php」,「/path/to/your/script.php」])。使用'script_response = subprocess.check_output([「php」,「/path/to/your/script.php」])'而不是第二個例子。 – jfs

+0

如果參數'shell'設置爲'True',那麼使用字符串而不是列表是好的 – Valen

5

您可以簡單地從Python執行php可執行文件。

編輯:例如爲Python 3.5和更高的使用subprocess.run

import subprocess 

result = subprocess.run(
    ['php', 'image.php'], # program and arguments 
    stdout=subprocess.PIPE, # capture stdout 
    check=True    # raise exception if program fails 
) 
print(result.stdout)   # result.stdout contains a byte-string 
+0

你可以發佈任何的例子嗎? – jiahao

+0

http://mail.python.org/pipermail/tutor/2009-October/071973.html – Sjoerd

+0

假設可以從命令行調用php腳本並接受命令行參數來描述如何處理圖像使用內置的子進程包。 導入子程序 subprocess.call([「/ path/to/php」,「/path/to/php/script.php」,「argument」]) –

2

讓周圍的PHP腳本,它的包裝:

  • 執行的東西(如果我沒理解好,這是一個圖像
  • 然後重定向(301永久移動)到結果圖像, ,圖像應該有一天清除)。

所以,你可以參考這個服務(PHP腳本)用一個簡單的HTTP請求,從任何地方,你可以用瀏覽器進行測試,在Python PRG使用,你只需要下載圖像的常用方法。

另外,如果你有這樣一個獨立的子系統,不要不好意思用不同的語言/技術來實現它。它有幾個優點,例如您可以在不同的主機上安裝該服務。

推薦閱讀:Service-Oriented Architecture基於維基百科。

+0

這是一個非常不錯的主意!我想它可以解決我的問題。非常感謝。 – jiahao

4

您可以使用php.py。這將允許你在Python在這個例子中(從here拍攝)執行PHP代碼,如:

php = PHP("require '../code/private/common.php';") 
code = """for ($i = 1; $i <= 10; $i++) { echo "$i\n"; }""" 
print php.get_raw(code) 
+0

嗨。謝謝你的幫助。如果你檢查這個程序的源代碼,你可以看到我必須手動輸入php代碼。由於它也鏈接到一些.inc文件,所以它不是那麼好的選擇。不過謝謝。 – jiahao