Python脚本在传递$ _GET参数时调用PHP脚本

时间:2014-05-27 23:53:37

标签: php python

我目前在我的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 个答案:

答案 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
}