我有一个python程序,它启动另一个可执行文件作为子进程。反过来,子进程启动父进程作为客户端连接到的XML-RPC服务器。
我不想修复端口号,因为有时端口可能无法使用,因为同一程序的另一个实例在同一台机器上运行。
我可以将它留给父进程来选择端口号并将该信息作为参数或通过Unix环境变量传递。
但是在最糟糕的情况下,有可能从父母检查的时间开始,端口号变得不可用,然后子过程试图获取。
我们可以让子proc首先获取端口号,然后告诉父节点。子流程打印大量数据,并将其重定向到文件。有没有比解析标准更好的方法?类似于Unix Env变量,但修改了调用者的环境。
另一种方法是父节点有一个xml-rpc服务器并将地址传递给子proc。子proc将拨打电话并告知其服务器的地址。
还有更好的方法吗?
答案 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