如何从Python中安全地清除Gnome中的两个剪贴板?
Gnome桌面有两个剪贴板,X.org(保存所有选择)和旧版(CTRL+C)。我正在编写一个简单的python脚本来清除两个剪贴板,最好是安全地清除,因为这可能是在复制粘贴密码之后完成的 我在这里看到的代码是:如何从Python中安全地清除Gnome中的两个剪贴板?,python,python-3.x,gnome,gnome-terminal,xclip,Python,Python 3.x,Gnome,Gnome Terminal,Xclip,Gnome桌面有两个剪贴板,X.org(保存所有选择)和旧版(CTRL+C)。我正在编写一个简单的python脚本来清除两个剪贴板,最好是安全地清除,因为这可能是在复制粘贴密码之后完成的 我在这里看到的代码是: # empty X.org clipboard os.system("xclip -i /dev/null") # empty GNOME clipboard os.system("touch blank") os.system("xclip -selection clipbo
# empty X.org clipboard
os.system("xclip -i /dev/null")
# empty GNOME clipboard
os.system("touch blank")
os.system("xclip -selection clipboard blank")
不幸的是,由于某种原因,此代码创建了一个名为blank
的文件,因此我们必须将其删除:
os.remove("blank")
然而,主要的问题是,通过调用这两个脚本,即使在我关闭终端之后,xclip
进程仍然处于打开状态
因此,此选项存在两个问题:
1) 它创建了一个空白文件,在我看来这是一个有缺陷的方法
2) 它会留下一个进程,这可能是一个安全漏洞。
我也知道这种方法:
os.system("echo "" | xclip -selection clipboard") # empty clipboard
但是,这个方法会在剪贴板中留下一个\n
换行符,因此我也不会认为这个方法有效
那么如何正确执行呢?我知道三种从Python中清除剪贴板的方法。首先使用tkinter:
try:
from Tkinter import Tk
except ImportError:
from tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.destroy()
第二个是xclip,但我使用xclip如下:
echo -n | xclip -selection clipboard
它会创建一条新线吗
最后,可以使用xsel:
xsel -bc
误解
PRIMARY
和CLIPBOARD
。它们都不是“遗产”xclip
必须让后台进程保持运行,以便为任何请求它的进程提供它设置的选择。当选择内容为空时,它基本上是无用的,但一旦选择/复制了其他内容,它就会消失,这肯定不会带来安全风险os.system
(或任何语言的system
),除非运行用户指定的shell命令(如中的!
)。它使用shell(特别是),它(因为它是用于交互使用的)需要各种引用以避免对生成的输入的误解,它不能直接设置子对象的打开文件,并且它很容易忽略子对象的退出状态
xclip
和xsel
广泛可用(例如,它们都在Ubuntu存储库中)。你使用;在Python3.5或更高版本中,它看起来像
subprocess.run("xclip",stdin=subprocess.DEVNULL)
subprocess.run(["xclip","-selection","clipboard"],input="")
subprocess.run(["xsel","-c"])
(如果不立即等待程序退出,stdin
和input
之间的选择更为重要。)xsel
有一个显式的--清除选项,它避免了输入和后台处理
#CLIPBOARD cleaner
subprocess.run(["xsel","-bc"])
#PRIMARY cleaner
subprocess.run(["xsel","-c"])
这一个清除了两个缓冲区,并且没有留下任何僵尸进程。感谢大家提出其中一些建议。我建议大家看一看完全用python编写的X剪贴板管理器,它可以做你想做的事情,或者提供足够的代码来帮助你解决问题。尝试
echo-n
而不是echo”“
@davishering请写下你的建议作为答案,我很好奇如何使用子流程来完成它。我只熟悉操作系统包,但我认为这不是最有效的方法。echo命令现在看起来不错,没有新行。这样做与通过xsel命令执行有什么区别?同样,tkinter解决方案需要安装该软件包,默认情况下没有安装,我可以安装,但我现在不想安装。此外,这些只清除遗留剪贴板,但保留X.org一个完整的。通过检查手册页,我看不到任何一个有比另一个明显的安全改进。xsel对tho的依赖性较少,而xclip似乎有更多的特性。对于“误解”部分,一个大喇叭+1。Unix剪贴板是一个巨大的烂摊子(而且是一个勉强工作的FWIW),但是没有“gnome遗留剪贴板”这样的东西。脚本可以工作,但进程仍然挂在那里:你甚至需要输入和-c
?@DavisHerring你有何建议?如果找到更好的方法,请编辑答案。我的答案已经包含xsel-c
,没有input=“”
。添加-b
的目标是剪贴板,这是非常正确的;我认为这在手册页上是显而易见的。@DavisHerring是的,你是正确的,不需要输入,这样也很好。