linux 运行 python 出错
想在服务器运行一个python文件,但是报错了。
我使用的是goland的ssh连接,别的命令都正常。
但是这个python文件运行之后就报错这个,是代码有问题还是别的原因呢?
求大佬指点 😄
下边是py代码:
from socket import *
from sqlite3 import connect
import threading
from datetime import *
# 时间格式声明,用于后面的记录系统时间
ISOTIMEFORMAT = '%Y-%m-%d %H:%M:%S'
# 设置IP地址和端口号
IP = '142.4.124.15'
PORT = 10086
# 用户列表和套接字列表,用于后面给每个套接字发送信息
user_list = []
socket_list = []
# 聊天记录存储至当前目录下的serverlog.txt文件中
try:
with open('serverlog.txt', 'a+') as serverlog:
curtime = datetime.now().strftime(ISOTIMEFORMAT)
serverlog.write('\n\n-----------服务器打开时间:'+str(curtime)+',开始记录聊天-----------\n')
except:
print('ERROR!')
# 读取套接字连接
s = socket()
s.bind((IP, PORT))
s.listen()
def read_client(s, nickname):
try:
return s.recv(2048).decode('utf-8') # 获取此套接字(用户)发送的消息
except: # 一旦断开连接则记录log以及向其他套接字发送相关信息
curtime = datetime.now().strftime(ISOTIMEFORMAT) # 获取当前时间
print(curtime)
print(nickname + ' 离开了聊天室!')
with open('serverlog.txt', 'a+') as serverlog: # log记录
serverlog.write(str(curtime) + ' ' + nickname + ' 离开了聊天室!\n')
socket_list.remove(s)
user_list.remove(nickname)
for client in socket_list: # 其他套接字通知(即通知其他聊天窗口)
client.send(('系统消息:'+ nickname + ' 离开了聊天室!').encode('utf-8'))
# 接收Client端消息并发送
def socket_target(s, nickname):
try:
s.send((','.join(user_list)).encode('utf-8')) # 将用户列表送给各个套接字,用逗号隔开
while True:
content = read_client(s, nickname) # 获取用户发送的消息
if content is None:
break
else:
curtime = datetime.now().strftime(ISOTIMEFORMAT) # 系统时间打印
print(curtime)
print(nickname+'说:'+content)
with open('serverlog.txt', 'a+') as serverlog: # log记录
serverlog.write(str(curtime) + ' ' + nickname + '说:' + content + '\n')
for client in socket_list: # 其他套接字通知
client.send((nickname + '说:'+ content).encode('utf-8'))
except:
print('Error!')
while True: # 不断接受新的套接字进来,实现“多人”
conn, addr = s.accept() # 获取套接字与此套接字的地址
socket_list.append(conn) # 套接字列表更新
nickname = conn.recv(2048).decode('utf-8') # 接受昵称
if nickname in user_list: # 昵称查重,相同则在后面加上数字
i = 1
while True:
if nickname+str(i) in user_list:
i = i + 1
else:
nickname = nickname + str(i)
break
user_list.append(nickname) # 用户列表更新,加入新用户(新的套接字)
curtime = datetime.now().strftime(ISOTIMEFORMAT)
print(curtime)
print(nickname + ' 进入了聊天室!')
with open('serverlog.txt', 'a+') as serverlog: # log记录
serverlog.write(str(curtime) + ' ' + nickname + ' 进入了聊天室!\n')
for client in socket_list[0:len(socket_list)-1]: # 其他套接字通知
client.send(('系统消息:'+ nickname + ' 进入了聊天室!').encode('utf-8'))
# 加入线程中跑,加入函数为socket_target,参数为conn,nickname
threading.Thread(target=socket
因为python文件不是这么运行的
你sudo那个文件,等于在命令行一行一行输文件的内容
一般是 python test.py
只是举例,具体看你python环境配置
在文件头加上
#!/usr/bin/python
试试
python ./echat.py