将变量从PHP传递到python

将变量从PHP传递到python,php,python,Php,Python,我有一个python脚本。当我以以下方式从命令行运行脚本时: python upgrade.py arg1 arg2 脚本运行成功。 现在,我尝试通过PHP代码使用以下方法传递相同的变量: passthru("python upgrade_device.py $arg1 $arg2"); 脚本不执行。 我接受以下论点: sys.argv 参数传递正确 我已经用打印测试过了 这是执行失败时的特定命令: child=pexpect.spawn('ssh admin@%s'%ip_addr)

我有一个python脚本。当我以以下方式从命令行运行脚本时:

python upgrade.py arg1 arg2
脚本运行成功。 现在,我尝试通过PHP代码使用以下方法传递相同的变量:

passthru("python upgrade_device.py $arg1 $arg2");
脚本不执行。 我接受以下论点:

sys.argv
参数传递正确 我已经用打印测试过了

这是执行失败时的特定命令:

child=pexpect.spawn('ssh admin@%s'%ip_addr)
ip_addr是从PHP传递的参数之一。在这个命令的正下方,我是ip_addr,以便找到传递给该命令的值。并且该值与预期值相同

我已正确存储ip_addr变量。 我甚至已经将其类型转换为字符串,所以这应该不是问题


一般来说,从命令行传递变量和从PHP传递变量的格式是否有差异?据我所知,我认为通过shell和PHP传递变量是一样的,我不能100%确定,但我从经验中了解到这一点

对于您的情况,如果您使用print验证了它是正确的字符串(如果有效,则意味着获取输出并在终端中测试它),那么验证python脚本文件是否与php脚本文件位于同一目录下,因为shell将在当前php脚本路径打开。因此,shell命令应该尊重这一点。例如,假设php脚本文件位于根“/”,而python脚本文件位于“/myPythonScripts/imageprocessing/”,那么当您执行类似“python myPyScript.py 646545645”的内容时,例如,在本例中,您应该在php中执行“python./myPythonScripts/imageprocessing/myPyScript.py 646545645”,正如我所说,shell是在php脚本路径上启动的

现在,如果这不是问题,那么首先尝试使用escapeshellcmd()对字符串进行转义,然后查看它给出了什么。有些字符不受shell支持,或者具有特定含义,并且shell对其进行了不同的解析。。确保它们都没有作为参数传递

如果以上这些都没有帮助,试着改用execshell(),看看它能带来什么。很可能这不会有什么不同

编辑:如果没有任何帮助,尝试稍微改变一下交换的方式,并使用json在响应中的方式(这是一种更方便的方式)


如果其中任何一个解决了问题,请准确地回答哪一个是!我希望这会有帮助。如果不是你的情况,它可能对未来的其他人有用。当你这样做时,也考虑给出解决方案!(我个人也感兴趣)

您的PHP是否启用了安全模式?
PHP-i | grep safe_模式
@sjdaw安全模式关闭时