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


Python script calling PHP script while passing $_GET parameters

我目前正在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];
?>

这给了你价值。我的蟒蛇有点生疏,但这是最基本的。