2014-06-13 23 views
-1

我的Python腳本是:調用PHP與子

base_url = "http://server.com/sync.php?" 
phone_url = "phone=%s" % "12345678" 
pass_url = "pass=%s" % "xxxxxxxxx" 
verif_url = "u=%s" % "12345678" 
url = base_url + "%s&%s&%s" % (phone_url,pass_url,verif_url) 
req = urllib.urlopen(url) 
the_page = req.read() 

的URL看起來像:http://server.com/sync.php?phone=123456781&pass=xxxxxxxxx&u=12345678

工作正常,但它的速度很慢...

所以我嘗試使用子過程:

proc = subprocess.Popen("php ./sync.php", "shell=True, stdout=subprocess.PIPE) 
script_response = proc.stdout.read() 

如何發送參數? (電話,通,U)

我的PHP文件的內容:

$username = $_GET["phone"]; 
$password = $_GET["pass"]; 
$u = $_GET["u"]; 

回答

1

爲了提供Popen你應該把它們存儲在列表中的參數:

cmd = ["php", "./sync.php"] 
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) 

你可以看到Popen help第一個參數args應該是一個程序自變量的序列或者是一個單獨的字符串

另請注意,您可以使用cwd參數來精確確定當前目錄。

+0

好了,所以我爲例CMD = 「PHP」, 「./sync.php」,%phone_url「&通過=%s的「%pass_url」&u =%s「%verif_url]? –

+0

從終端執行的確切命令行是什麼? – daouzli

+0

我不知道從終端,但從我的瀏覽器:http://server.com/sync.php?phone=123456781&pass=xxxxxxxxx&u=12345678 –

0

我想你是錯誤地調用子流程。

P.S.不要使用相對路徑,使用絕對路徑。

你可以試試這個: 「手機=%s」 時

proc = subprocess.Popen("php /path/to/your/sync.php arg1 arg2 argN", shell=True, stdout=subprocess.PIPE) 
script_response = proc.stdout.read() 
+0

我不明白至少需要使用的語法:「php /sync.php phone_url pass_url verif_url」? –