Python 脚本无法更改 Thunar 书签

问题描述 投票:0回答:1

我正在使用 Linux,并且正在编写一个编辑 Thunar 书签的脚本,但我遇到了一些问题。

我有以下Python代码:

if os.path.exists("/home/user/.config/gtk-3.0/bookmarks"):
    with open("/home/user/.config/gtk-3.0/bookmarks", 'r') as self.file:
        self.bookmarks = self.file.readlines()
        for i in range(len(self.bookmarks)):
            if "/home/user/MyBookmark" in self.bookmarks[i]:
                self.bookmarks.pop(i)
    print(self.bookmarks)
    file.close()
    
    with open("/home/user/.config/gtk-3.0/bookmarks", 'w') as file:
        for bookmark in self.bookmarks:
            print(bookmark)
            file.write(bookmark)
    file.close()

它的作用基本上是从

MyBookmark
书签中删除
thunar
,此代码位于 PySide6 脚本中,并且它不能完全工作,它在我启动程序时执行,并且按预期删除书签,但作为一旦我结束执行,书签就会恢复并且
MyBookmark
返回。

这是整个脚本中我唯一一次触摸书签。

我发现只有当我在运行程序时打开

thunar
时才会出现此问题,所以我这样做了

os.system('killall thunar 2>/dev/null')

在运行更改它的部分之前,它可以工作,但由于显而易见的原因,这不是最好的解决方案。

有人知道可能导致此问题的原因吗?有其他解决方案吗?

python linux gtk3 bookmarks thunar
1个回答
0
投票

在您的代码中,当您弹出索引时,它会删除列表元素并将所有内容向上移动,这会让您错过下一个项目。这是一个演示。假设您的文件如下所示:

foo
bar
/home/user/MyBookmark/1
/home/user/MyBookmark/2
last

当您在索引 2 处弹出时,列表变为

foo
bar
/home/user/MyBookmark/2
last

然后您将转到索引 3,这意味着您没有处理 ../MyBookmark/2 行。

这里有一个修复:使用列表理解:

with open("bookmarks") as stream:
    lines = [line for line in stream if "/home/user/MyBookmark" not in line]

with open("bookmarks", "w") as stream:
    stream.writelines(lines)

第一个

with
块将收集所有不包含特定文本的行。然后下一个块写出这些行。

© www.soinside.com 2019 - 2024. All rights reserved.