xmlrpc - 动态选择端口号

时间:2017-04-12 08:57:36

标签: python xml-rpc

我有一个python程序,它启动另一个可执行文件作为子进程。反过来,子进程启动父进程作为客户端连接到的XML-RPC服务器。

我不想修复端口号,因为有时端口可能无法使用,因为同一程序的另一个实例在同一台机器上运行。

我可以将它留给父进程来选择端口号并将该信息作为参数或通过Unix环境变量传递。

但是在最糟糕的情况下,有可能从父母检查的时间开始,端口号变得不可用,然后子过程试图获取。

我们可以让子proc首先获取端口号,然后告诉父节点。子流程打印大量数据,并将其重定向到文件。有没有比解析标准更好的方法?类似于Unix Env​​变量,但修改了调用者的环境。

另一种方法是父节点有一个xml-rpc服务器并将地址传递给子proc。子proc将拨打电话并告知其服务器的地址。

还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

不确定您的操作系统,如果是ubuntu,那么您的父母可以使用子进程和netstat找到该端口。

netstat -antlp | grep processid

从子进程读取stdout的另一种方法:

#parent
import subprocess

proc=subprocess.Popen(['./test_python_xmlrpc_server.py'], stdout=subprocess.PIPE,close_fds=True)

line = proc.stdout.readline()
print line

孩子过程:

#!/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_addres
#
#

REF:

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