【问题标题】:Python request object return through socketPython请求对象通过socket返回
【发布时间】:2012-06-23 07:36:46
【问题描述】:

我的设置如下:

Python 2.6(嵌入商业应用程序)使用 subprocess 在(外部)python 2.7 中启动外部脚本。
然后,外部脚本使用套接字模块将 python 命令发送回嵌入式 python。
使用以下代码初始化套接字:

self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  

我使用以下命令发送命令:

self.sock.send("print ('hello, world!')")

目前它运作良好。我能够发送我想要的所有命令,并很好地控制程序。

我的问题:如何请求通过套接字发回信息?
例如,我需要让程序给我一个字符串列表。但是我很难理解嵌入式 python 是如何通过我的开放套接字发回任何数据的?
谢谢!

【问题讨论】:

  • 我猜您希望通过套接字返回诸如print("Hello world") 之类的命令的输出?
  • @JoachimPileborg ,我应该使用不同的命令,例如:str(45)

标签: python sockets object return send


【解决方案1】:

您始终可以进行双向套接字通信。

当外部 python 发送一些东西时,总是发送一个元组,其中一个参数可以指定你正在请求一些东西。

我举个例子,

设置双向套接字通信(简单的客户端-服务器模型 - 同步或异步取决于您的项目/应用程序需要什么。)

2.7 发送一个这样的元组 -

(<command>, 1)

1 表示你想要你发送的命令的输出(你说它正在工作,将被发送回 2.7。

所以,当 2.6 收到元组时,元组的第 0 位总是代表它试图发送的命令,第 1 位代表回传参数。

使用简单的 if-else 条件,您可以检查它是否为 1,然后将结果发送回 2.7 - 否则不是。

相当简单的逻辑。

【讨论】:

  • 感谢您的回复。这听起来像是一个很好的解决方案。在通过套接字发送之前,我需要手动腌制一个对象吗?
  • 是的,我相信是的。要在 python 中通过套接字发送对象,您需要在发送时对其进行序列化,在接收时对其进行反序列化,这可以通过 pickle 完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 2021-02-03
  • 1970-01-01
相关资源
最近更新 更多