如何通过使用WSGI来执行Python脚本以避免PHP exec()?

3 投票
1 回答
539 浏览
提问于 2025-04-16 11:13

目前,我正在通过PHP中的exec()函数来启动一个Python脚本,因为我需要将一些动态变量从网站/MySQL传递到命令行。不过,我想提高这个操作的速度和安全性,所以我考虑使用WSGI。我在想,是否可以把Python脚本嵌入到一个WSGI文件中,这样就可以直接(或间接)使用从PHP传递过来的变量……但我该怎么做呢?我从来没有使用过WSGI,所以我甚至不知道这个问题是不是很傻 :)

1 个回答

1

首先,你能不能只用Python或者PHP来完成这个任务?通常来说,使用多种语言被认为是不太好的做法。这并不是说这样做一定不好,但你应该先问问自己为什么要这样做,只有在你确信这是个好主意后再继续。

关于你想做的具体事情,有几个选择:

  1. 如果你使用的是Apache服务器,可以用virtual()这个函数来通过Apache发起一个新的请求。

    这假设你正在使用mod_php和mod_wsgi。简单来说,你需要为想要传递的变量构建一个查询字符串,然后像这样调用它:

    virtual('path/to/python.py?'.$query);
    
  2. 自己写一个PHP的WSGI网关。

    也就是说,把WSGI的规范编码成一个库,然后在PHP中显式调用它。

  3. 继续使用exec()来调用(这可能是目前最好的选择)。

你需要考虑的是,在不同语言之间相互调用会有额外的开销。这是无法避免的,这是事情的本质。所以,我建议你把整个请求都放在一个环境中处理,这样会更简单。

撰写回答