问题描述
我正在尝试构建一个客户端服务器应用程序,其中客户端从服务器请求一些有关文件,目录,网络等信息。问题是,当我尝试加载文件和目录的名称以及有关它们的相应信息时,出现以下错误:
texto1 = font.render(''+str(files_info),True,verde,preto)
pygame.error: Width or height is too large
这并不奇怪,因为我正在一个非常拥挤的文件夹中测试该应用程序。我还必须加载PID列表以及它们的名称和cpu使用率,这些列表很长。我的问题是:如何使大量信息适合Pygame屏幕?想到可能要使用多个表面,例如尝试创建“下一个”按钮,但是我不知道该怎么做。
服务器端:
import socket,psutil,pickle,os,time,datetime,cpuinfo
def mostra_uso_cpu_e_ram(socket_cliente):
info1 =('Usuario solicitou Informações de uso de processamento e Memória')
resposta = []
cpu = ('Porcentagem: ',psutil.cpu_percent())
resposta.append(cpu)
resposta.append(cpuinfo.get_cpu_info()['brand'])
resposta.append(cpuinfo.get_cpu_info()['arch'])
resposta.append(cpuinfo.get_cpu_info()['bits'])
resposta.append(cpuinfo.get_cpu_info()['hz_actual'])
resposta.append(psutil.cpu_freq()[0])
resposta.append(psutil.disk_usage('/')[3])
mem = psutil.virtual_memory()
mem_percent = mem.used/mem.total
resposta.append(mem_percent)
bytes_resp = pickle.dumps(resposta)
socket_cliente.send(bytes_resp)
print(info1)
def arquivos_diretorios(socket_cliente):
info2 = ('\nUsuario solicitou Informações sobre arquivos e diretórios')
info2 += ('\n\n-------------------------------------------------------\n\n INFORMAÇÕES SOBRE DIRETÓRIOS E ARQUIVOS\n')
socket_cliente.send(info2.encode('utf-8'))
lista_send = []
caminho = os.getcwd()
lista_send.append(caminho)
caminho = pickle.dumps(lista_send)
socket_cliente.send(caminho)
lista_arquivos = []
for a in os.listdir("."):
if os.path.isdir(a):
pathname = 'd %s' % a
lista_arquivos.append(pathname)
statinfo = os.stat(a)
data_criacao = datetime.datetime.fromtimestamp(statinfo.st_ctime)
data_acesso = datetime.datetime.fromtimestamp(statinfo.st_atime)
data_modificacao = datetime.datetime.fromtimestamp(statinfo.st_mtime)
size = os.path.getsize(a)
criacao = 'Data de Criação: {}'.format(data_criacao)
lista_arquivos.append(criacao)
acesso = 'Data do Acesso mais recente: {}'.format(data_acesso)
lista_arquivos.append(acesso)
modificacao = 'Data da última modificação: {}'.format(data_modificacao)
lista_arquivos.append(modificacao)
tamanho = 'Tamanho do diretório em bytes: {}'.format(size)
lista_arquivos.append(tamanho)
elif os.path.isfile(a):
pathname = '- %s' % a
lista_arquivos.append(pathname)
statinfo = os.stat(a)
data_criacao = datetime.datetime.fromtimestamp(statinfo.st_ctime)
data_acesso = datetime.datetime.fromtimestamp(statinfo.st_atime)
data_modificacao = datetime.datetime.fromtimestamp(statinfo.st_mtime)
size = statinfo.st_size
criacao = 'Data de Criação: {}'.format(data_criacao)
lista_arquivos.append(criacao)
acesso = 'Data do Acesso mais recente: {}'.format(data_acesso)
lista_arquivos.append(acesso)
modificacao = 'Data da última modificação: {}'.format(data_modificacao)
lista_arquivos.append(modificacao)
tamanho = 'Tamanho do arquivo em bytes: {}'.format(size)
lista_arquivos.append(tamanho)
arq_dir = pickle.dumps(lista_arquivos)
socket_cliente.send(arq_dir)
def processos_ativos(socket_cliente):
info3 = ('\nUsuario solicitou Informações sobre processos ativos')
info3 += ('\n\n-------------------------------------------------------\n\n INFORMAÇÕES SOBRE PROCESSOS EM ANdamENTO\n')
info3 += ('\n\n*** Lista de processos em andamento no servidor ***\n\n')
socket_cliente.send(info3.encode('utf-8'))
listofProcessNames = []
for proc in psutil.process_iter():
pInfoDict = proc.as_dict(attrs=['pid','name','cpu_percent'])
listofProcessNames.append(pInfoDict)
proc_info = pickle.dumps(listofProcessNames)
socket_cliente.send(proc_info)
socket_servidor = socket.socket(socket.AF_INET,socket.soCK_STREAM)
host = socket.gethostname()
porta = 9999
socket_servidor.bind((host,porta))
socket_servidor.listen()
print("Servidor",host,"esperando conexão na porta",porta)
(socket_cliente,addr) = socket_servidor.accept()
print("Conectado a:",str(addr))
while True:
mostra_uso_cpu_e_ram(socket_cliente)
arquivos_diretorios(socket_cliente)
processos_ativos(socket_cliente)
客户端:
import socket,pickle
import pygame
def imprime(l):
texto = ''
for i in l:
texto = texto + '\n' + '{:>20}'.format(i)
#print(texto)
s = socket.socket(socket.AF_INET,socket.soCK_STREAM)
s.connect((socket.gethostname(),9999))
bytes_resp = s.recv(1024)
lista = pickle.loads(bytes_resp)
info2 = s.recv(4000)
caminho = s.recv(4000)
arq_dir = s.recv(100000)
files_info = pickle.loads(arq_dir)
info3 = s.recv(4000)
proc_info = s.recv(100000)
processos = pickle.loads(proc_info)
def display_slide():
tela1 = True
while tela1:
tela.fill([0,0])
texto1 = font.render('MENU',preto)
textoRect1 = texto1.get_rect()
textoRect1.topleft=[200,25]
tela.blit(texto1,textoRect1)
textoc = font.render('1 - cpu and Memory ',preto)
textoRectc = textoc.get_rect()
textoRectc.topleft=[10,100]
tela.blit(textoc,textoRectc)
texto2 = font.render('2 - Files and Directories ',preto)
textoRect2 = texto2.get_rect()
textoRect2.topleft=[10,150]
tela.blit(texto2,textoRect2)
texto3 = font.render('3 - Processes: ',preto)
textoRect3 = texto3.get_rect()
textoRect3.topleft=[10,200]
tela.blit(texto3,textoRect3)
texto4 = font.render('4 - Network ',preto)
textoRect4 = texto4.get_rect()
textoRect4.topleft=[10,250]
tela.blit(texto4,textoRect4)
texto5 = font.render('5 - Exit ',preto)
textoRect5 = texto5.get_rect()
textoRect5.topleft=[10,300]
tela.blit(texto5,textoRect5)
texto6 = font.render('Select one of the options above or press arrow right ',preto)
textoRect6 = texto6.get_rect()
textoRect6.topleft=[10,350]
tela.blit(texto6,textoRect6)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
tela1 = False
tela2 = True
else:
if event.key == pygame.K_1:
tela1 = False
tela2 = True
while tela2:
tela.fill([0,0])
titulo = font.render('cpu and Memory Usage: ',preto)
textoRect0 = titulo.get_rect()
textoRect0.topleft=[300,10]
tela.blit(titulo,textoRect0)
texto1 = font.render(''+str(lista),preto)
textoRect1 = texto1.get_rect()
textoRect1.topleft=[10,30]
tela.blit(texto1,textoRect1)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
tela2 = False
tela1 = True
elif event.key == pygame.K_RIGHT:
tela2 = False
tela3 = True
while tela3:
tela.fill([0,0])
texto = font.render('Files and Directories: ',preto)
textoRect = texto.get_rect()
textoRect.topleft=[10,5]
tela.blit(texto,textoRect)
texto2 = font.render(''+str(files_info),95]
tela.blit(texto2,textoRect2)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
tela2 = True
tela3 = False
pygame.init()
largura_tela = 800
altura_tela = 800
tela = pygame.display.set_mode((largura_tela,altura_tela))
background = pygame.Surface(tela.get_size())
tela.blit(background,(0,0))
pygame.display.set_caption('Monitoramento e Análise do Sistema')
tela.fill([0,0])
verde = (0,255,0)
preto = (0,0)
cinza = (128,128,255)
font = pygame.font.Font(None,24)
terminou = False
while not terminou:
display_slide()
pygame.display.update()
pygame.display.quit()
pygame.quit()
需要渲染的大量文本之一的示例(而pygame由于某种原因将其转换为元组)
['- Port.py','Data de Criação: 2020-07-30 22:15:18.937129','Data do Acesso mais recente: 2020-09-07 23:23:54.694304','Data da última modificação: 2020-07-30 22:15:18.937129','Tamanho do arquivo em bytes: 451','- TP06_AnaCarolina_MeloPereira.py','Data de Criação: 2020-09-07 16:09:31.861902','Data do Acesso mais recente: 2020-09-07 16:09:33.247105','Data da última modificação: 2020-09-07 16:09:31.861902','Tamanho do arquivo em bytes: 18679','- TP06_AnaCarolina_MeloPereira.py.zip','Data de Criação: 2020-08-27 22:25:03.858477','Data do Acesso mais recente: 2020-08-27 22:25:03.857714','Data da última modificação: 2020-08-27 22:25:03.857647','Tamanho do arquivo em bytes: 3948','- .DS_Store','Data de Criação: 2020-08-11 00:18:59.014230','Data do Acesso mais recente: 2020-08-11 00:18:59.014324','Data da última modificação: 2020-08-11 00:18:59.014230','Tamanho do arquivo em bytes: 10244','- processesteste.py','Data de Criação: 2020-08-10 23:40:56.940639','Data do Acesso mais recente: 2020-09-01 21:45:05.290113','Data da última modificação: 2020-08-10 23:40:56.940639','Tamanho do arquivo em bytes: 1784','- Teste.rtf','Data de Criação: 2020-07-28 22:44:07.852383','Data do Acesso mais recente: 2020-07-28 22:44:07.858401','Data da última modificação: 2020-06-22 21:05:49.444665','Tamanho do arquivo em bytes: 405','- clienteteste.py','Data de Criação: 2020-09-08 19:45:04.342697','Data do Acesso mais recente: 2020-09-08 19:45:06.279300','Data da última modificação: 2020-09-08 19:45:04.342697','Tamanho do arquivo em bytes: 5586','d 02 - Arquitetura de Computadores,Sistemas Operacionais e Redes','Data de Criação: 2020-08-11 00:16:02.910568','Data do Acesso mais recente: 2020-08-11 00:16:04.645334','Data da última modificação: 2020-08-11 00:16:02.910568','Tamanho do diretório em bytes: 224','- asdfghjkl.py','Data de Criação: 2020-08-26 23:16:08.074653','Data do Acesso mais recente: 2020-09-04 19:57:19.062760','Data da última modificação: 2020-08-26 23:16:08.074653','Tamanho do arquivo em bytes: 2248','- seila.py','Data de Criação: 2020-08-10 23:40:59.082237','Data do Acesso mais recente: 2020-09-07 23:24:10.945553','Data da última modificação: 2020-08-10 23:40:59.082237','Tamanho do arquivo em bytes: 1369','- .teste.rtf','Data de Criação: 2020-06-22 21:07:29.094099','Data do Acesso mais recente: 2020-06-22 21:07:29.094099','Data da última modificação: 2020-06-22 21:07:29.094099','Tamanho do arquivo em bytes: 0','- servidorteste.py','Data de Criação: 2020-09-08 18:49:47.657584','Data do Acesso mais recente: 2020-09-08 18:49:49.351929','Data da última modificação: 2020-09-08 18:49:47.657584','Tamanho do arquivo em bytes: 6174','- clientearquivo.py','Data de Criação: 2020-09-08 11:55:02.196598','Data do Acesso mais recente: 2020-09-08 11:55:04.356020','Data da última modificação: 2020-09-08 11:55:02.196598','Tamanho do arquivo em bytes: 11613','- perproc.py','Data de Criação: 2020-08-17 22:07:22.857411','Data do Acesso mais recente: 2020-09-07 23:23:03.746201','Data da última modificação: 2020-08-17 22:07:22.857411','Tamanho do arquivo em bytes: 1070','- servidorarquivo.py','Data de Criação: 2020-09-07 19:52:32.416164','Data do Acesso mais recente: 2020-09-07 19:52:34.320696','Data da última modificação: 2020-09-07 19:52:32.416164','Tamanho do arquivo em bytes: 6578','- clienteTP09.py','Data de Criação: 2020-09-08 10:25:11.597179','Data do Acesso mais recente: 2020-09-08 10:25:13.191097','Data da última modificação: 2020-09-08 10:25:11.597179','Tamanho do arquivo em bytes: 2682','- servidorTP09.py','Data de Criação: 2020-09-08 10:25:10.014792','Data do Acesso mais recente: 2020-09-08 10:25:11.691246','Data da última modificação: 2020-09-08 10:25:10.014792','Tamanho do arquivo em bytes: 9511','- Teste2.py','Data de Criação: 2020-06-23 00:45:32.142930','Data do Acesso mais recente: 2020-07-28 22:30:01.126377','Data da última modificação: 2020-06-23 00:45:32.142930','Tamanho do arquivo em bytes: 1075','d 01 - Bloco de EnTrada','Data de Criação: 2020-05-26 21:14:05.451512','Data do Acesso mais recente: 2020-05-26 21:14:06.713600','Data da última modificação: 2020-05-26 21:14:05.451512','Tamanho do diretório em bytes: 192','- Teste.py','Data de Criação: 2020-06-22 21:58:07.500057','Data do Acesso mais recente: 2020-07-28 22:30:01.144316','Data da última modificação: 2020-06-22 21:58:07.500057','Tamanho do arquivo em bytes: 1330','- servidor.py','Data de Criação: 2020-09-01 22:44:03.209760','Data do Acesso mais recente: 2020-09-01 22:44:03.211094','Data da última modificação: 2020-09-01 22:44:03.209760','Tamanho do arquivo em bytes: 857','- Sera.py','Data de Criação: 2020-08-10 01:46:24.746689','Data do Acesso mais recente: 2020-09-07 23:24:01.534768','Data da última modificação: 2020-08-10 01:46:24.746689','Tamanho do arquivo em bytes: 2118','- Socket.py','Data de Criação: 2020-08-04 15:52:59.223063','Data do Acesso mais recente: 2020-09-03 20:04:57.059565','Data da última modificação: 2020-08-04 15:52:59.223063','Tamanho do arquivo em bytes: 398','- Prints.py','Data de Criação: 2020-06-23 19:51:50.521518','Data do Acesso mais recente: 2020-07-28 22:30:00.996539','Data da última modificação: 2020-06-23 19:51:50.521518','Tamanho do arquivo em bytes: 104','- testearquivo.py','Data de Criação: 2020-09-06 22:49:58.351485','Data do Acesso mais recente: 2020-09-06 22:49:59.087386','Data da última modificação: 2020-09-06 22:49:58.351485','Tamanho do arquivo em bytes: 507','- cliente.py','Data de Criação: 2020-09-01 23:17:40.626674','Data do Acesso mais recente: 2020-09-01 23:17:41.100185','Data da última modificação: 2020-09-01 23:17:40.626674','Tamanho do arquivo em bytes: 465']
解决方法
可能您只需要对传入的数据进行一些分析就可以清理它。只需以5的“步长”遍历列表就可以轻松实现:
dir_list = ['- Port.py','Data de Criação: 2020-07-30 22:15:18.937129','Data do Acesso mais recente: 2020-09-07 23:23:54.694304','Data da última modificação: 2020-07-30 22:15:18.937129','Tamanho do arquivo em bytes: 451','- TP06_AnaCarolina_MeloPereira.py','Data de Criação: 2020-09-07 16:09:31.861902','Data do Acesso mais recente: 2020-09-07 16:09:33.247105','Data da última modificação: 2020-09-07 16:09:31.861902','Tamanho do arquivo em bytes: 18679','- TP06_AnaCarolina_MeloPereira.py.zip','Data de Criação: 2020-08-27 22:25:03.858477','Data do Acesso mais recente: 2020-08-27 22:25:03.857714','Data da última modificação: 2020-08-27 22:25:03.857647','Tamanho do arquivo em bytes: 3948','- .DS_Store','Data de Criação: 2020-08-11 00:18:59.014230','Data do Acesso mais recente: 2020-08-11 00:18:59.014324','Data da última modificação: 2020-08-11 00:18:59.014230','Tamanho do arquivo em bytes: 10244' ]
print( "Filename Size Last MOdified" )
for i in range( 0,len( dir_list ),5 ):
filename = dir_list[ i + 0 ].strip()
data_criação = dir_list[ i + 1 ].split( ':',1 )[1].strip()[ 0:19 ] # convert to YYYY-MM-DD HH:MM:SS
data_acesso = dir_list[ i + 2 ].split( ':',1 )[1].strip()[ 0:19 ] # convert to YYYY-MM-DD HH:MM:SS
data_modificação = dir_list[ i + 3 ].split( ':',1 )[1].strip()[ 0:19 ] # convert to YYYY-MM-DD HH:MM:SS
file_size = dir_list[ i + 4 ].split( ':',1 )[1]
# limited processing
if ( filename.startswith( '- ' ) ):
filename = filename[ 2: ] # trim leading "- "
file_size = int( file_size )
print( "%-40s %6d %s" % ( filename,file_size,data_modificação ) )
这大大减少了数据的文本量,使其可以轻松地绘制到PyGame曲面上的列中。 pygame文字示例很多。
对我来说,上面的示例给出了:
[#] python3 ./file_show.py
Filename Size Last MOdified
Port.py 451 2020-07-30 22:15:18
TP06_AnaCarolina_MeloPereira.py 18679 2020-09-07 16:09:31
TP06_AnaCarolina_MeloPereira.py.zip 3948 2020-08-27 22:25:03
.DS_Store 10244 2020-08-11 00:18:59