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

标签 php python

我目前在我的 python 脚本中使用 subprocess.call(["php", "test.php"]) 来调用 PHP 脚本。

我想知道是否可以在调用脚本时将 $_GET 参数传递给脚本。如果可能的话,我会怎么做?

这就是我想要得到的:
"subprocess.call(["php", "test.php?i=3"])"


这是我当前的代码:
测试.py

import subprocess
subprocess.call(["php", "test.php"])


测试.php

<?php
    echo $_GET['i'];
?>

最佳答案

使用您的 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
}

关于php - Python 脚本在传递 $_GET 参数时调用 PHP 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23900794/

相关文章:

python - Keras - 没有停止和恢复训练的好方法?

python - 自动 sklearn : How to load pickle file and run predict()

python - scikit-learn 中带有 BaseEstimator 的 GradientBoostingClassifier?

php - woocommerce/wordpress Hook 何时被调用?

php - SQL计算行数并按顺序显示

php - MySQL:使用 PHP 一次一批选择行

java - jython多线程

python - 再向模式添加一个 StructField

php - 使用 sql 通过 csv 将产品导入到 woocommerce

PHP 正则表达式 preg_match_all : Capturing text between multiple square brackets