[問題] subprocess.Popen 和 IPC 衝突?

看板Python作者 (allstar)時間13年前 (2012/02/29 20:22), 編輯推噓0(0015)
留言15則, 2人參與, 最新討論串1/1
需要讓 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

03/01 00:45, , 1F
你的client再等你給他raw_input的結果...所以還沒關掉吧?
03/01 00:45, 1F

03/01 13:59, , 2F
本來就沒打算要關掉阿XD,後來把close_fd設成True就搞定了
03/01 13:59, 2F

03/01 14:00, , 3F
實在搞不清楚child process怎麼運作的...
03/01 14:00, 3F

03/01 14:01, , 4F
題外話,subprocess不吃unicode,有夠麻煩
03/01 14:01, 4F

03/01 14:36, , 5F
對厚 我傻了 0.0
03/01 14:36, 5F

03/01 15:29, , 6F
不過我去查了close 似乎不是立刻殺掉socket
03/01 15:29, 6F

03/01 15:30, , 7F

03/01 15:31, , 8F
不過 我用shutdown 他跟我說沒連接 0.0
03/01 15:31, 8F

03/01 15:36, , 9F
另外我覺得bytestring能吃中文也ok啦 像shelve也不吃unicode
03/01 15:36, 9F

03/01 16:32, , 10F
問題就在不是中文的部分阿,subprocess似乎會強制轉換成
03/01 16:32, 10F

03/01 16:33, , 11F
filesystem的encoding,在windows上就是用mbcs下去轉
03/01 16:33, 11F

03/01 16:34, , 12F
遇到簡體或日文檔名會轉換出?代替轉不出來的字元
03/01 16:34, 12F

03/01 16:34, , 13F
然後就找不到檔案而無法執行了...
03/01 16:34, 13F

03/01 16:36, , 14F
加上有裝unicode補完計畫就更混亂,還得去pypi找替代品
03/01 16:36, 14F

03/01 20:14, , 15F
囧 考慮得好詳細啊 這我就沒研究了… 目前改檔名是唯一解嗎?
03/01 20:14, 15F
文章代碼(AID): #1FJXYTiP (Python)
文章代碼(AID): #1FJXYTiP (Python)