Python脚本调用PHP脚本并传递$_GET参数
我现在在我的Python脚本中使用 subprocess.call(["php", "test.php"])
来调用一个PHP脚本。
我想知道在调用这个脚本的时候,是否可以传递 $_GET
参数。如果可以的话,我该怎么做呢?
我想要实现的是这样的效果:
"subprocess.call(["php", "test.php?i=3"])
"
这是我现在的代码:
test.py
import subprocess
subprocess.call(["php", "test.php"])
test.php
<?php
echo $_GET['i'];
?>
2 个回答
2
你不会这样调用它,而是应该这样:
subprocess.call(["php","-f","test.php","1"])
这里的1是你传递的参数值。然后,在你的脚本中:
<?php
echo $argv[0];
?>
这样你就能得到这个值了。我的Python有点生疏,但这就是基本的用法。
3
试试下面这个Python代码,你可以传入任意数量的参数。
subprocess.call(["php","-f","test.php","param0:value0", "param1:value1"])
现在来看PHP的部分:
<?php
$_GET = array();
foreach($argv as $key => $pair) {
if ($key == 0) { //skip first element which is script name (test.php)
continue;
}
list($key, $value) = explode(":", $pair);
$_GET[$key] = $value;
}
这个代码手动解析了 $argv
,并为你填充了 $_GET
,这样你只需要修改PHP文件的开头部分。
不过,这个方法并不完美,因为如果你的键或值中包含和 :
一样的字符,就会出问题。更好的方法是通过一个JSON字符串来传递参数。比如:
subprocess.call(["php","-f","test.php", json.dumps(your_dictionary)])
然后在PHP中:
<?php
if ($argc > 1) {
$json_str = $argv[1];
$_GET = json_decode($json_str);
}
最后,正如用户574632所建议的,你可以用下面的 if
语句把这段代码包裹起来,这样即使你还在运行它作为网页脚本,也不会产生干扰。
if (php_sapi_name() == 'cli') {
//execute in here *only* if run from the command-line
}