2017-06-13 269 views
0

我有一個python腳本。當我從命令行運行腳本時:將變量從PHP傳遞給python

python upgrade.py arg1 arg2 

腳本成功運行。 現在我試圖通過使用PHP代碼通過相同的變量:

passthru("python upgrade_device.py $arg1 $arg2"); 

腳本不執行。

sys.argv 

的參數被正確傳遞 我已使用打印

這是特定命令,其中所述執行失敗測試:

child=pexpect.spawn('ssh [email protected]%s'%ip_addr) 

的ip_addr是一個 我使用接受的參數從PHP傳來的參數。在這個命令的下面,我是ip_addr,以便找到傳遞給命令的值。價值如預期。

我有正確存儲ip_addr變量。 我甚至可以將它轉換爲字符串,因此不應該成爲問題。

一般情況下,是有格式的命令行傳遞變量和PHP

+0

您的PHP是否啓用了安全模式? 'php -i | grep safe_mode' – sjdaws

+0

@sjdaws安全模式關閉 – john

回答

0

通過爲我的理解,我認爲將其通過殼和php是一樣的差別,我不能肯定的100%但那是我從經驗中知道的。

對於你的情況,如果你有打印,這是一個正確的字符串傳遞驗證(平均乘坐輸出,並在終端測試它,如果它工作),如果它的工作,比驗證是否python腳本文件與php腳本文件相同的目錄,因爲shell將在當前php腳本路徑中打開。所以的shell命令應該尊重那個。例如,讓假設PHP腳本文件是在根「/」,並Python腳本文件在「/ myPythonScripts/imageProccessing /」那麼當你執行類似「蟒蛇myPyScript.py 646545645」例如,在這個例子中在PHP中,您應該執行「python ./myPythonScripts/imageProccessing/myPyScript.py 646545645」,正如我所說的,shell是在php腳本路徑上啓動的。現在

如果這不是問題,然後嘗試逃避串第一,與escapeshellcmd()將。看看它給了什麼。 有一些字符不受shell支持,或者具有一定的含義並且被shell解析爲不同的字符。確保它們中沒有一個作爲參數傳遞。

如果以上都不是有用的,請嘗試使用execshell()來代替,並查看它給出了什麼。太可能不會有所作爲。

編輯:如果沒有任何幫助,試圖改變只是有點交換的方式進行,並使用它在使用JSON https://stackoverflow.com/a/14048046/7668448這個響應做的方式(這是一種更方便的)

如果有任何問題解決了問題,請回答哪一個問題!我希望這會有所幫助。此外,如果不是你的情況,它可能對未來的其他人有用。當你這樣做的時候也要考慮給出解決方案! (我個人也感興趣)