如何使用PHP和Apache Web服务器正确调用Python Pyro客户端?

Infinigrove

我有一个Python3 Pyro4服务器客户端应用程序,从命令行运行时效果很好。

server.py

import Pyro4

@Pyro4.expose
class JokeGen(object):
    def __init__(self):
        self.jokevar = "Joke"

    def joke(self, name):
        return "Sorry "+name+", I don't know any jokes."

def main():
    Pyro4.Daemon.serveSimple(
            {
                JokeGen: "example.jokegen"
            },
            ns = True)

if __name__=="__main__":
    main()

client.py

#!/usr/bin/env python3
import Pyro4
import sys

person_to_joke = sys.argv[1]

joke_control = Pyro4.Proxy("PYRONAME:example.jokegen")

print (joke_control.joke(person_to_joke))

问题是我需要使用PHP从Web应用程序运行客户端。
我创建了一个joke.php

<?php
$command = escapeshellcmd('/full/path/to/client.py SquirrelMaster');
$output = shell_exec($command);
echo $output;
?>

尽管此代码确实有效,但我还是进行了一些非标准的编程以使其正常工作。我复制了/home/user/.local(已为用户安装了pyro4模块)的副本,并将其放在/ var / www /中,并赋予了www-data所有权。

sudo chown -R www-data.www-data /var/www/.local

似乎必须有一种更好的方法来完成此操作,而且我很确定,如果我以这种方式离开的话,将来还会有潜在的问题。问题似乎是Pyro4模块需要可供www-data用户使用。所以我的问题是,在运行apache2的Ubuntu linux上,www.data用户可以使用Pyro4模块的正确方法是什么?

编辑-添加

我还尝试执行以下操作:

sudo mkdir /var/www/.local
sudo mkdir /var/www/.cache
sudo chown www-data.www-data /var/www/.local
sudo chown www-data.www-data /var/www/.cache

然后运行命令:

sudo -H -u www-data pip3 install pyro4 --user www-data

但这会导致错误“找不到符合www-data要求的版本(来自版本:)找不到与www-data匹配的发行版”

尔门·德·琼(Irmen de Jong)

看起来有点像这个问题https://superuser.com/questions/646062/granting-write-permissions-to-www-data-group

我想建议使用PYTHONPATH环境变量来指向www-data用户可读的库安装位置,在该位置将需要访问的python模块复制到该位置,但是我认为这在当今是不正确的。

最好的办法是使用www.data用户创建一个Python Virtualenv,并使用该virtualenv中的pip命令将所有必需的模块安装到其中。您可能必须使用一些sudo / chown舞蹈才能正确完成此操作。

另一种方法也许是根本不用打扰python子进程,而是使用Pyro的HTTP网关这样,您只需从PHP向本地运行的Pyro http网关进程发出HTTP请求,即可将其转换为正确的Pyro调用。我不了解PHP,但在我看来,向运行在某些本地主机端口上的服务器发出自定义http请求应该很容易。这也可能更快,因为您不会为每个调用都启动python进程。

(edit):另一个成功的解决方案似乎是以下解决方案,其中sudo用于在适当的用户下调用pip,从而将库安装到www-data.local库文件夹中:

  • 创建/var/www/.local/var/www/.cache文件夹,www-data允许对这些文件夹进行权限设置(而不是/var/www为了避免安全问题)
  • invoke如果是较旧的版本,sudo -H -u www-data pip3 install pyro4您可能仍需要添加--user到pip命令,因为我认为默认情况下,只有最新的pip版本默认安装到用户的lib文件夹,而不是全局系统python的lib文件夹。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用grpc在python服务器和php客户端之间进行通信?

来自分类Dev

Python 服务器和客户端无法通信

来自分类Dev

Python、TCP、服务器和客户端

来自分类Dev

使用php soap服务器和Java客户端的Web服务

来自分类Dev

如何使用FIFO和选择的系统调用从服务器与客户端聊天?

来自分类Dev

如何使用socket.io从客户端调用服务器端功能?

来自分类Dev

结合使用Meteor和Angular2 / Typescript,如何基于客户端事件从服务器端代码调用外部Web服务?

来自分类Dev

如何在客户端中存储Web服务器的多个服务器地址?

来自分类Dev

Websocket Autobahn Python 客户端:如何使用服务器和客户端证书连接到服务器?

来自分类Dev

如何使用此客户端服务器程序?

来自分类Dev

如何从客户端调用服务器端按钮单击功能?

来自分类Dev

如何从流星中的客户端调用服务器端功能

来自分类Dev

如何知道服务器端的其余客户端调用了哪个http动作

来自分类Dev

如何从流星中的客户端调用服务器端功能

来自分类Dev

如何在Python客户端和C ++服务器上使用套接字

来自分类Dev

如何使用 Java 客户端和 Python 服务器通过套接字创建 IPC?

来自分类Dev

使用angularjs客户端和Flask服务器在剩余调用中使用正斜杠

来自分类Dev

如何实现通过服务器(聊天)传递客户端到客户端的消息?

来自分类Dev

使用套接字在客户端阻止的客户端-服务器通信

来自分类Dev

如何在客户端和服务器中正确使用OpenTelemetry导出器和OpenTelemetry收集器?

来自分类Dev

如何从客户端接收整数和字符串的缓冲区,并正确存储它们?(cpp 服务器,python 客户端)

来自分类Dev

OpenSSL让服务器和客户端协商方法

来自分类Dev

反应服务器和客户端渲染

来自分类Dev

聊天服务器和客户端实现?

来自分类Dev

Android中的蓝牙服务器和客户端

来自分类Dev

XmlSerializer和NetworkStream与Tcp服务器-客户端

来自分类Dev

TCP服务器和客户端Java

来自分类Dev

服务器和客户端的InputStream

来自分类Dev

Android服务器和客户端连接

Related 相关文章

  1. 1

    如何使用grpc在python服务器和php客户端之间进行通信?

  2. 2

    Python 服务器和客户端无法通信

  3. 3

    Python、TCP、服务器和客户端

  4. 4

    使用php soap服务器和Java客户端的Web服务

  5. 5

    如何使用FIFO和选择的系统调用从服务器与客户端聊天?

  6. 6

    如何使用socket.io从客户端调用服务器端功能?

  7. 7

    结合使用Meteor和Angular2 / Typescript,如何基于客户端事件从服务器端代码调用外部Web服务?

  8. 8

    如何在客户端中存储Web服务器的多个服务器地址?

  9. 9

    Websocket Autobahn Python 客户端:如何使用服务器和客户端证书连接到服务器?

  10. 10

    如何使用此客户端服务器程序?

  11. 11

    如何从客户端调用服务器端按钮单击功能?

  12. 12

    如何从流星中的客户端调用服务器端功能

  13. 13

    如何知道服务器端的其余客户端调用了哪个http动作

  14. 14

    如何从流星中的客户端调用服务器端功能

  15. 15

    如何在Python客户端和C ++服务器上使用套接字

  16. 16

    如何使用 Java 客户端和 Python 服务器通过套接字创建 IPC?

  17. 17

    使用angularjs客户端和Flask服务器在剩余调用中使用正斜杠

  18. 18

    如何实现通过服务器(聊天)传递客户端到客户端的消息?

  19. 19

    使用套接字在客户端阻止的客户端-服务器通信

  20. 20

    如何在客户端和服务器中正确使用OpenTelemetry导出器和OpenTelemetry收集器?

  21. 21

    如何从客户端接收整数和字符串的缓冲区,并正确存储它们?(cpp 服务器,python 客户端)

  22. 22

    OpenSSL让服务器和客户端协商方法

  23. 23

    反应服务器和客户端渲染

  24. 24

    聊天服务器和客户端实现?

  25. 25

    Android中的蓝牙服务器和客户端

  26. 26

    XmlSerializer和NetworkStream与Tcp服务器-客户端

  27. 27

    TCP服务器和客户端Java

  28. 28

    服务器和客户端的InputStream

  29. 29

    Android服务器和客户端连接

热门标签

归档