我在“ A”计算机上运行脚本,然后通过脚本从“ B”计算机连接到“ A”计算机。我将消息发送到计算机“ A”,并且我的脚本使用“ exec()”指令运行它。
我想通过“ B”计算机上的套接字查看在“ A”计算机上执行消息的结果。我尝试更改sys.stdout = socket_response
但有一个错误:“套接字对象没有属性write()”
因此,如何通过套接字连接将标准输出(用于print或exec())从“ A”计算机重定向到“ B”计算机。”
这将是我脚本中的某种“ python解释器”。
抱歉,我无法回答自己的问题
谢谢大家!
我使用简单的方法,建议我@Torxed。这是我的猴子代码(这只是一个示例,不是我的真实脚本)
#-*-coding:utf-8-*-
import socket
import sys
class stdout_():
def __init__(self, sock_resp):
self.sock_resp = sock_resp
def write(self, mes):
self.sock_resp.send(mes)
MY_IP = 'localhost'
MY_PORT = 31337
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Start server")
old_out = sys.stdout
srv.bind((MY_IP, MY_PORT))
srv.listen(0)
sock_resp, addr_resp = srv.accept()
new_out = stdout_(sock_resp)
sys.stdout = new_out
#sys.stdout = sock_resp ### sock_object has no attribute 'write'
while 1:
try:
a = sock_resp.recv(1024)
exec(a)
except socket.timeout:
#print('server timeout!!' + '\n')
continue
我用Putty连接到脚本并发送“ print'abc'”,然后收到答复“ abc”
makefile
python套接字类中有函数:
插座。makefile(mode ='r',buffering = None,*,encoding = None,errors = None,newline = None)
返回与套接字关联的文件对象。返回的确切类型取决于赋予makefile()的参数。这些参数的解释方式与内置的open()函数相同。
除非没有剩余的套接字引用,否则关闭文件对象不会关闭套接字。套接字必须处于阻止模式;它可能会有超时,但是如果发生超时,文件对象的内部缓冲区可能会以不一致的状态结束。
您可以在Mark Lutz的书中阅读如何使用它(使套接字看起来像文件和流一章)
书中的示例(想法很简单:使用socket创建文件对象并与其socket.makefile
链接sys.stdout
):
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句