Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python script calling PHP script while passing $_GET parameters

Tags:

python

php

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'];
?>
like image 263
Matthew Avatar asked Oct 01 '22 16:10

Matthew


1 Answers

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
}
like image 70
14 revs, 12 users 16% Avatar answered Oct 11 '22 02:10

14 revs, 12 users 16%