I'm currently using subprocess.call(["php", "test.php"]) in my python script to call a PHP script.
I would like to know if it's possible to pass $_GET parameters to the script while calling it. If it's possible how would I do it?
This is what I'm trying to get:
"subprocess.call(["php", "test.php?i=3"])"
This is my current code:
test.py
import subprocess
subprocess.call(["php", "test.php"])
test.php
<?php
    echo $_GET['i'];
?>
                Try the following with your Python passing in as many params as you'd like.
subprocess.call(["php","-f","test.php","param0:value0", "param1:value1"])
Now in 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;
}
This manually parses $argv and populates $_GET for you so you only have modify the beginning of your PHP file.
This is an imperfect solution if your key or value have the same value as the : delimiter. An even better way would be to pass in the parameters via a JSON string. Something like:
subprocess.call(["php","-f","test.php", json.dumps(your_dictionary)])
and in PHP
<?php
if ($argc > 1) {
  $json_str = $argv[1];
  $_GET = json_decode($json_str);
}
and finally as suggested by user574632, you can wrap this code with the following if statment to ensure it doesn't interfere if you're still running it as a web-script as well.
if (php_sapi_name() == 'cli') {
  //execute in here *only* if run from the command-line
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With