我目前正在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'];
?>
请尝试以下操作,让您的Python根据需要传入任意数量的params。
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);
}
最后,正如user574632所建议的那样,您可以使用以下if
语句来包装此代码,以确保在您仍将其作为web脚本运行时不会受到干扰。
if (php_sapi_name() == 'cli') {
//execute in here *only* if run from the command-line
}
你不会这样称呼它,更像这样:
subprocess.call(["php","-f","test.php","1"])
其中1是参数的值。然后,在您的脚本中:
<?php
echo $argv[0];
?>
这给了你价值。我的蟒蛇有点生疏,但这是最基本的。