xmlrpc - 动态选择端口号
Posted
技术标签:
【中文标题】xmlrpc - 动态选择端口号【英文标题】:xmlrpc - dynamically choosing port number 【发布时间】:2017-09-07 23:01:31 【问题描述】:我有一个 python 程序,它启动另一个可执行文件作为子进程。反过来,子进程启动一个 XML-RPC 服务器,父进程作为客户端连接到该服务器。
我不想修复端口号,因为有时端口可能不可用,因为同一程序的另一个实例正在同一台机器上运行。
我可以让父进程选择端口号并将该信息作为参数或通过 Unix 环境变量传递。
但在最坏的情况下,端口号可能会在父进程检查然后子进程尝试获取时变得不可用。
我们可以让子进程先获取端口号,然后告诉父进程。子进程打印大量数据,这些数据被重定向到一个文件。有没有比解析标准输出更好的方法?类似于 Unix Env 变量,但会修改调用者的环境。
另一种方法是让父进程拥有一个 xml-rpc 服务器并将地址传递给子进程。子进程会进行调用并告知其服务器地址。
有没有更好的办法?
【问题讨论】:
【参考方案1】:不确定您的操作系统,如果是 ubuntu,那么您的父母可以通过使用子进程 ID 和 netstat 找到端口。
netstat -antlp | grep processid
从子进程读取标准输出的另一种方式:
#parent
import subprocess
proc=subprocess.Popen(['./test_python_xmlrpc_server.py'], stdout=subprocess.PIPE,close_fds=True)
line = proc.stdout.readline()
print line
子进程使用 0 端口,因此选择了一个空闲端口。然后打印出端口:
#!/usr/bin/python
#./test_python_xmlrpc_server.py
from SimpleXMLRPCServer import SimpleXMLRPCServer
server = SimpleXMLRPCServer(("0.0.0.0", 0)) #pick a free port
print server.server_address
#
#
参考:
How to kill a process on a port on ubuntu
Stop reading process output in Python without hang?
xmlrpc getting auto-assigned server port number
【讨论】:
以上是关于xmlrpc - 动态选择端口号的主要内容,如果未能解决你的问题,请参考以下文章