gpt4 book ai didi

linux - Python脚本在/tmp/创建目录,占用系统空间

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:06 24 4
gpt4 key购买 nike

我正在运行一个充当服务器的脚本,允许两个客户端连接到它,并且对于一个特定的客户端向服务器发送消息,服务器修改它,然后将它发送到另一个客户端。

这似乎有效,因为接收客户端确认输入已收到且有效。这是我打算连续运行的脚本。

但是,一个大问题是我的/tmp/目录中充满了名为 _M...(代表随机字符串的省略号)的目录,其中包含 python 模块(例如密码学,据我所知,我没有使用)和时区信息(实际上是 python 支持的每个时区)。它似乎非常频繁地创建它们,但我无法确定在这个过程中究竟是什么在做这个。

我创建了一个工作清理 bash 脚本,每 5 分钟从目录中删除超过 5 分钟的文件,但是,我不能保证当我为其他设备复制这个过程时,目录将具有相同的名称格式.与其为我创建的每个进程创建一个唯一的 bash 脚本,我宁愿能够从 python 脚本中清理目录,甚至更好,以防止目录被创建。

问题是,我不确定这是如何完成的,而且我在 SO 上没有看到任何关于创建这些目录的内容,也没有看到如何删除它们。

以下是我的脚本

import time, socket, os, sys, re, select

IP = '192.168.109.8'
PORT = [3000, 3001]
PID = str(os.getpid())
PIDFILE = "/path/to/pidfile.pid"
client_counter = 0
sockets_list = []

def runCheck():
if os.path.isfile(PIDFILE):
return False
else:
with open(PIDFILE, 'w') as pidfile:
pidfile.write(PID)
return True

def openSockets():
for i in PORT:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((IP, i))
s.listen(1)
sockets_list.append(s)

def receiveMessage(client_socket):
try:
message = client_socket.recv(2048).decode('utf-8')
if not message:
return False
message = str(message)
return message
except:
return False

def fixString(local_string):
#processes
return local_string

def main():
try:
openSockets()
clients = {}
print(f'Listening for connections on {IP}:{PORT[0]} and {PORT[1]}...')
client_count = 0

while True:
read_sockets, _, exception_sockets = select.select(sockets_list, [], sockets_list)
for notified_socket in read_sockets:
if notified_socket == sockets_list[0] or notified_socket == sockets_list[1]:
client_socket, client_address = sockets_list[client_count].accept()
client_count = (client_count + 1) % 2
sockets_list.append(client_socket)
clients[client_socket] = client_socket
print('Accepted new connection from: {}'.format(*client_address))
else:
message = receiveMessage(notified_socket)
if message is False:
continue

message = fixString(message)

for client_socket in clients:
if client_socket != notified_socket:
if message != "N/A":
client_socket.send(bytes(message, "utf-8"))
for notified_socket in exception_sockets:
sockets_list.remove(notified_socket)
del clients[notified_socket]
time.sleep(1)

except socket.timeout:
for i in sockets_list:
i.close()
os.remove(PIDFILE)
sys.exit()
except Exception as e:
for i in sockets_list:
i.close()
err_details = str('Error in line {}'.format(sys.exc_info()[-1].tb_lineno), type(e).__name__, e)
os.remove(PIDFILE)
print("Exception: {}".format(err_details))
sys.exit()

if __name__ == "__main__":
if runCheck():
main()
else:
pass

我应该如何设置它以便 python 脚本删除它在/tmp/目录中创建的目录,或者更好的是,首先不创建它们?任何帮助将不胜感激。

最佳答案

事实证明,生成这些文件的是 PyInstaller。在文档中,它指出 pyinstaller 在以单文件模式创建可执行文件时生成此 _MEI 目录,并且它应该也将其删除,但由于某种原因它没有。

关于linux - Python脚本在/tmp/创建目录,占用系统空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56045620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com