我正在尝试编写一个小型剪贴板记录器(用于Linux),用于侦听事件(剪贴板内容的更改)并将剪贴板内容写入文件(更改)。
我想到的是一个带有剪贴板模块pyperclip的简单while循环:
import pyperclip
recent_value = ""
while True:
tmp_value = pyperclip.paste()
if tmp_value != recent_value:
recent_value = tmp_value
with open(".clipboard_history.txt", "a") as f:
f.write(recent_value + "\n")
所以我的第一个问题是,我可以实际运行一段时间的True循环来聆听'或者这会消耗太多记忆,或者通常效率低下还是做法不好?
第二个问题是,如何在后台运行此命令,如shell作业控件(&符号)?
我应该使用建议的here或某种事件循环或线程魔法的守护进程吗?
我基本上想要一些位于后台的内容并监听事件(剪贴板内容更改),对其做出反应(写入文件)并再次等待。
============================
编辑:感谢您的投入! +新问题:如果我使用线程,我还需要睡眠方法吗?
答案 0 :(得分:2)
运行当前循环将耗尽CPU,从时间导入,并使用time.sleep(1)或其他会使程序暂时休眠的东西(理想情况下,如果您认为它们将是0.1-2秒)快速交换复制/粘贴)
如果这是您的所有程序将要执行的操作,则无需进行操作。
答案 1 :(得分:1)
所以我的第一个问题是,我可以实际运行一段时间的True循环 '听'或者这会消耗太多的记忆或一般 低效或不好的做法?
效率低下。您可能希望在循环结束时添加
time.sleep(0.1)
更好的做法是每次写入剪贴板时运行脚本。此讨论也与您相关:Trigger an event when clipboard content changes
第二个问题是,我怎样才能在后台运行它 一个shell作业控件(&符号)?
请参阅here。
答案 2 :(得分:1)
首先,您需要修改缩进,如下所示:
class JWTAuthenticator
{
public function handle($request, Closure $next)
{
$token =JWTAuth::getToken();
$my_new_token = JWTAuth::refresh($token);
$request->headers->set('Authorization','Bearer '.$my_new_token);
return $next($request);
}
现在,如果您的脚本有更多代码,并且您希望此while True:
tmp_value = pyperclip.paste()
if tmp_value != recent_value:
recent_value = tmp_value
with open(".clipboard_history.txt", "a") as f:
f.write(recent_value + "\n")
继续在后台运行,则可以使用loop
并为循环定义函数:
threading
答案 3 :(得分:0)
要运行没有控制台的python文件,扩展名应为.pyw
,例如在运行logger.pyw
时,它将在不打开python shell的情况下运行。
希望这能回答你的问题。