在嵌入python解釋器的C程序中,我通過TCP套接字產生了一個python交互式控制檯。在套接字上沒有換行python交互式控制檯
import socket
import code
import sys
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('0.0.0.0', 2000))
s.listen(1)
c = s.accept()[0] # client socket
def sread(s, len):
return s.recv(len)
def swrite(s, str):
return s.sendall(str)
def sreadline(s):
return sread(s, 256) # lazy implementation for quick testing
socket.socket.read = sread
socket.socket.write = swrite
socket.socket.readline = sreadline
sys.stdin = c
sys.stdout = c
sys.stderr = c
code.interact() # runs the interactive console
這基本上工作。 但是,交互式控制檯在返回某些用戶輸入語句的結果時永遠不會發出任何行尾字符。 換句話說,我們得到的東西是這樣的:
nc localhost 2000
Python 2.7.3 (default, Sep 26 2012, 21:53:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 1+1
2>>>
我們看到的結果是後無CR-LF「2」的解釋響應用戶輸入「1 + 1」發送,並在下一個提示前'>>>'。 通過以十六進制檢查套接字用戶端的輸出,或者檢查將要寫入套接字的函數swrite中的字符串來確認是否存在任何行尾字符(CR和/或LF) ()。
現在爲什麼沒有交互式控制檯發出的行尾字符?
它可以被修復和如何?
如果你可以包含足夠的代碼來重現問題,它會使答案更容易。 – Aya 2013-04-22 20:18:16
當然,完成了。順便說一句,我找到了解決方法。 – user2179288 2013-04-22 20:57:21