我在使用为 Nautilus 编写的 Python 脚本时遇到了一些奇怪的行为。
它位置优越,+Xed 并且可以很好地与“小文件列表”(大约 1000 个)配合使用。
当我选择超过一定数量的文件时,脚本不会启动,就好像通过 NAUTILUS_SCRIPT_SELECTED_FILE_PATHS 传递给我的脚本的列表大小受到限制一样。
当文件数量超过一定数量时,脚本将不再启动。
NAUTILUS_SCRIPT_SELECTED_FILE_PATHS 是否有已知的大小限制?
提前感谢任何建议!
上下文:该脚本按照图片日期对我的家庭照片进行排序,子目录为 [YYYY-MM] 样式。因为要发送的图片超过 100,000 张,所以我发现用脚本来完成这项工作很有必要。
我使用 Tk 进行了一些奇怪的操作来跟进进度。请温柔一点,我是个初学者 ;-)
这是我写的脚本:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys, os, datetime
import tkinter as tk
def main(args):
# tk related
global text, fen
def ecrire(texte):
text.insert(tk.INSERT, texte + "\n")
text.see('end')
fen.update_idletasks()
fen = tk.Tk()
fen.geometry("600x350")
fen.title("Process monitor")
# zone de texte dans la fenêtre
text = tk.Text(fen, height=20, width=80)
text.pack()
for path in os.getenv('NAUTILUS_SCRIPT_SELECTED_FILE_PATHS','').splitlines():
ecrire(path)
# get file modification date as datetime object
fstamp = os.path.getmtime(path)
fdate = datetime.datetime.fromtimestamp(fstamp)
ddir = fdate.strftime("[%Y-%m]")
basedir = os.path.dirname(path)
destdir =os.path.join(basedir, ddir)
destpath = os.path.join(destdir, os.path.basename(path))
# ensure destdir exists and handle duplicates
os.makedirs(destdir, exist_ok=True)
i=0
while os.path.exists(destpath):
x1, x2 = os.path.splitext(destpath)
i += 1
destpath = x1 + "_(" + str(i) + ")" + x2
os.rename(path, destpath)
ecrire(" -> " + destpath)
ecrire("\nClose window [X] to terminate")
fen.mainloop()
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv))
答案1
这不是一个记录的限制,但由于NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
是一个环境变量,其内容将受到系统中分配的用于存储环境变量的最大大小的限制。