使用while循环来监听活动?

时间:2017-06-26 17:47:21

标签: python loops events while-loop daemon

我正在尝试编写一个小型剪贴板记录器(用于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或某种事件循环或线程魔法的守护进程吗?

我基本上想要一些位于后台的内容并监听事件(剪贴板内容更改),对其做出反应(写入文件)并再次等待。

============================

编辑:感谢您的投入! +新问题:如果我使用线程,我还需要睡眠方法吗?

4 个答案:

答案 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的情况下运行。

希望这能回答你的问题。