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