作者os653 (allstar)
看板Python
标题[问题] subprocess.Popen 和 IPC 冲突?
时间Wed Feb 29 20:22:50 2012
需要让 A 和 B 两个程式用 socket 交谈,如果让 A 和 B 分开执行没问题
但让 A 以 subprocess.Popen 执行 B 时,只能同时执行一次
如果在前一个 A 和 B 还存在时再执行第二次
会出现
socket.error: [Errno 10048] 一次只能用一个通讯端位址
请问这该如何解决?
照理说有把 listen 的 socket 关掉,且分开执行没问题
用 subprocess.Popen 执行也不应该会有问题才对阿
code 如下
========== server.py ==========
import socket
address = ('127.0.0.1', 12345)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(address)
import subprocess # 注解掉这两行即可分开执行
subprocess.Popen('client.py', shell=True) # 且分开执行多次也不会出问题
s.listen(0)
conn, addr = s.accept()
s.close()
raw_input('server connected by %s\n' % repr(addr))
#========= client.py ==========
import socket
address = ('127.0.0.1', 12345)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(address)
raw_input('client connected\n')
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.46.124.87
1F:→ KSJ:你的client再等你给他raw_input的结果...所以还没关掉吧? 03/01 00:45
2F:→ os653:本来就没打算要关掉阿XD,後来把close_fd设成True就搞定了 03/01 13:59
3F:→ os653:实在搞不清楚child process怎麽运作的... 03/01 14:00
4F:→ os653:题外话,subprocess不吃unicode,有够麻烦 03/01 14:01
5F:→ KSJ:对厚 我傻了 0.0 03/01 14:36
6F:→ KSJ:不过我去查了close 似乎不是立刻杀掉socket 03/01 15:29
8F:→ KSJ:不过 我用shutdown 他跟我说没连接 0.0 03/01 15:31
9F:→ KSJ:另外我觉得bytestring能吃中文也ok啦 像shelve也不吃unicode 03/01 15:36
10F:→ os653:问题就在不是中文的部分阿,subprocess似乎会强制转换成 03/01 16:32
11F:→ os653:filesystem的encoding,在windows上就是用mbcs下去转 03/01 16:33
12F:→ os653:遇到简体或日文档名会转换出?代替转不出来的字元 03/01 16:34
13F:→ os653:然後就找不到档案而无法执行了... 03/01 16:34
14F:→ os653:加上有装unicode补完计画就更混乱,还得去pypi找替代品 03/01 16:36
15F:→ KSJ:囧 考虑得好详细啊 这我就没研究了… 目前改档名是唯一解吗? 03/01 20:14