让Python接受POST/Get请求

让Python接受POST/Get请求,python,php,Python,Php,我有一个PHP页面和一个Python程序。Python程序进行一个内部API调用,以获取需要在PHP页面上显示的信息 Python程序被设置为接受一个参数,并使用该参数处理API调用。例如,myPythonProgram 12345-获取有关帐户12345的信息 我想通过Ajax从我的PHP页面调用它,但是如果我按照应该调用的方式调用程序,我会得到404(程序和参数之间有一个空格)。我已经修改了Python脚本以接受请求(我想),但是当我这样做时,Python代码是呈现的,而不是结果。以下操作失

我有一个PHP页面和一个Python程序。Python程序进行一个内部API调用,以获取需要在PHP页面上显示的信息

Python程序被设置为接受一个参数,并使用该参数处理API调用。例如,
myPythonProgram 12345
-获取有关帐户12345的信息

我想通过Ajax从我的PHP页面调用它,但是如果我按照应该调用的方式调用程序,我会得到404(程序和参数之间有一个空格)。我已经修改了Python脚本以接受请求(我想),但是当我这样做时,Python代码是呈现的,而不是结果。以下操作失败:

$.ajax({
    type: 'POST',
    url: "myPythonProgram",
    data: { id: '12345' },
    success: function(response) {
        // Stuff
    },
    fail: function() {
       alert('Error');
    },
    complete: function() {
        // Stuff
    }
});
我想也许我可以通过
shell\u exec()
调用另一个PHP页面来执行Python程序,但该页面似乎是在Python程序完成其请求之前呈现的。比如:

$.ajax({
   type: 'POST',
   url: "callPy.php",
   data: { id: '12345' },
   success: function(response) {
       // Stuff
   },
   ....
});
callPy.php是:

<?php

$data = $_REQUEST['data'];

if (isset($data) && $data['id'] != NULL) {
    $info = shell_exec("myPythonProgram " . $data['id']);
    print_r(json_encode($info));
}

?>

如果我在一个shell中运行这个确切的命令
myPythonProgram 12345
,它就会工作。如果我修改callPy.php以硬编码id,然后在shell中调用
php callPy.php
,它就可以工作了。但在浏览器中调用此函数将导致null


如何使python接受POST或GET请求,或使PHP在呈现页面之前等待python程序完成?

这通过更改API调用所需文件的权限得到解决

首先,我检查了web浏览器使用的用户:
ps aux | egrep'(apache | httpd)
,这表明它是“apache”。接下来,我尝试以该用户的身份运行python程序:
sudo-u apache./mypython程序12345
。这导致API调用所需的证书出现错误


使用
shell\u exec()
,PHP将等待进程完成。因此,更改该证书上的权限使我能够以apache用户的身份运行该程序,并且我能够达到预期的效果。

通过更改API调用所需文件的权限,解决了这一问题

首先,我检查了web浏览器使用的用户:
ps aux | egrep'(apache | httpd)
,这表明它是“apache”。接下来,我尝试以该用户的身份运行python程序:
sudo-u apache./mypython程序12345
。这导致API调用所需的证书出现错误

使用
shell\u exec()
,PHP将等待进程完成。因此,更改该证书上的权限允许我以apache用户的身份运行该程序,并且我能够达到预期的效果