我有一个python脚本。当我从命令行运行脚本时:
python upgrade.py arg1 arg2
脚本成功运行。 现在我试图通过PHP代码传递相同的变量:
passthru("python upgrade_device.py $arg1 $arg2");
脚本无法执行。 我接受使用的论点:
sys.argv
正确传递参数 我已经使用print
进行了测试这是执行失败的特定命令:
child=pexpect.spawn('ssh admin@%s'%ip_addr)
ip_addr是从PHP传递的参数之一。在这个命令的正下方,我是ip_addr,以便找到传递给命令的值。价值与预期一致。
我正确存储了ip_addr变量。 我甚至把它变成了字符串,所以这不应该是问题。
通常,从命令行传递变量并从PHP传递
是否存在格式差异答案 0 :(得分:1)
根据我的理解,我认为通过shell和php传递它是一样的,我不能确定100%,但我从经验中知道。
对于你的情况,如果你已经通过打印验证它是正确的字符串传递(意味着取出输出并在终端测试它,如果它工作),如果它工作,那么验证是否python脚本文件与php脚本文件位于目录中,因为将在当前的php脚本路径中打开shell 。所以 shell命令应该尊重。例如,假设 php脚本文件位于根" /" , python脚本文件位于" / myPythonScripts / imageProccessing /" 然后当你执行类似" python myPyScript.py 646545645" 之类的东西时,在这个例子中,在php中你应该执行" python ./ myPythonScripts / imageProccessing / myPyScript.py 646545645" ,正如我所说的shell是在php脚本路径上启动的。
现在,如果这不是问题,请尝试使用 escapeshellcmd() 首先转义字符串。看看它给了什么。 有一些不受shell支持的字符,或者具有某种意义并且由shell解析的字符。确保它们都不作为参数传递。
如果以上都不是有用的,请尝试使用 execshell(),并查看它给出的内容。太可能不会有所作为。
编辑:如果没有任何帮助,请尝试稍微改变交换的方式,并使用json {{3}在此响应中完成的方式(它更方便)
如果其中任何一个解决了问题,请准确回答哪一个!我希望它会有所帮助。此外,如果不是您的情况,将来可能对其他人有用。想想在你做的时候给出解决方案! (我个人也很感兴趣)