我目前在我的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'];
?>
答案 0 :(得分:2)
你不会这样称呼它,更像是这样:
subprocess.call(["php","-f","test.php","1"])
其中1是参数的值。然后,在你的脚本中:
<?php
echo $argv[0];
?>
这为您提供了价值。我的python有点生疏,但这是基础。
答案 1 :(得分:2)
尝试以下内容,并在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);
}
最后根据user574632的建议,您可以使用以下if
声明包装此代码,以确保在您仍将其作为网络脚本运行时也不会产生干扰。
if (php_sapi_name() == 'cli') {
//execute in here *only* if run from the command-line
}