Python. Redirect stdout to a socket

前端 未结 2 1014
悲&欢浪女
悲&欢浪女 2020-12-30 06:59

I run my script on computer "A". Then I connect to computer "A" from computer "B" through my script. I send my message to computer "A"

2条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-30 07:31

    There is the makefile function in Python's socket class:

    socket.makefile(mode='r', buffering=None, *, encoding=None, errors=None, newline=None)

    Return a file object associated with the socket. The exact returned type depends on the arguments given to makefile(). These arguments are interpreted the same way as by the built-in open() function.

    Closing the file object won’t close the socket unless there are no remaining references to the socket. The socket must be in blocking mode; it can have a timeout, but the file object’s internal buffer may end up in a inconsistent state if a timeout occurs.

    You can read how to use it in Mark Lutz's book (chapter 12, "Making Sockets Look Like Files and Streams").

    An example from the book (the idea is simple: make a file object from a socket with socket.makefile and link sys.stdout with it):

    def redirectOut(port=port, host=host):
        """
        connect caller's standard output stream to a socket for GUI to listen
        start caller after listener started, else connect fails before accept
        """
        sock = socket(AF_INET, SOCK_STREAM)
        sock.connect((host, port))                # caller operates in client mode
        file = sock.makefile('w')                 # file interface: text, buffered
        sys.stdout = file                         # make prints go to sock.send
        return sock                               # if caller needs to access it raw
    

提交回复
热议问题