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 - 动态选择端口号的主要内容,如果未能解决你的问题,请参考以下文章

静态Web服务器-命令行启动动态绑定端口号

Python静态Web服务器-命令行启动动态绑定端口号

.NET开发服务器的localhost端口号如何设置?

静态Web服务器-命令行启动动态绑定端口号Python解释器详解实现代理池的API模块

安卓模拟器 端口号怎么查看

windows server 2008 端口号怎么开启