为了账号安全,请及时绑定邮箱和手机立即绑定

如何在两个正在运行的 python 程序之间链接变量?

如何在两个正在运行的 python 程序之间链接变量?

ITMISS 2022-07-26 15:48:39
我正在使用 Pynput 创建一个程序,简而言之,它会在按住键时执行某些操作。在对 Pynput 进行了一些研究之后,我发现没有办法,而且似乎没有计划的方法可以在按住键的同时做某事,所以我正在设计我的方法。我的计划是让两个 Python 脚本同时运行,它们之间有一个不断更新的变量。这是因为当在一个程序中使用时,while 循环会停止 Pynput 侦听器。其中一个脚本将监听键盘并相应地更新变量,另一个将实际执行结果。唯一的问题是我不知道如何在两个正在运行的脚本之间主动链接变量,并且互联网上没有任何东西让我知道如何这样做(我尝试过导入其他脚本和东西,但不仅是这很困难,因为我使用的是 Mac,但它没有主动传递变量)。目前,我的代码看起来有点像这样:(侦听器脚本)from pynput import keyboarddoThing = 0def on_press(key):    doThing = 1def on_release(key):    doThing = 0def startListener():    listener = keyboard.Listener(        on_press=on_press,        on_release=on_release)    listener.join()(做某事的脚本)while True:    if doThing == 1:        print('Thing')我想在它们之间链接的变量是 doThing,但我不知道我将如何实际设置变量。我正在考虑使用 JSON,但我不知道这是否是最好的方法。
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

这是一个使用线程的示例。这允许 Python 运行两个(或更多)单独的线程,每个线程同时做不同的事情。(从技术上讲,它们实际上并不是同时发生的,而是交替发生的,但这在这种情况下并不重要)。


在一个线程中,您监听按键。在另一个线程中,您检查关键状态并做出适当反应。


import threading

from pynput import keyboard


class KeyCheckThread(threading.Thread):

    def __init__(self):

        super(KeyCheckThread, self).__init__()

        self.doThing = 0


    def on_press(self, key):

        self.doThing = 1


    def on_release(self, key):

        self.doThing = 0


    def run(self):

        with keyboard.Listener(on_press=self.on_press, on_release=self.on_release) as listener:

            listener.join()



listenerThread = KeyCheckThread()

listenerThread.start()


while(True):

    if listenerThread.doThing == 1:

        print("doThing")


查看完整回答
反对 回复 2022-07-26
?
慕村9548890

TA贡献1884条经验 获得超4个赞

您已经考虑使用临时文件了吗?这是示例:


from pynput import keyboard


doThing = 0


def generate_variable(var): 

    with open("temp", "a") as temp:

        temp.write(str(var)) 


def on_press(key):

    generate_variable(1)


def on_release(key):

    doThing = 0


def startListener():

    listener = keyboard.Listener(

        on_press=on_press,

        on_release=on_release)

    listener.join()

在第二个脚本上:


def truncate_file(): 

    with open("temp","w"): 

        pass 


while True:

    doThing = len(open("temp", "r").read()) > 0

    if doThing:

        print('Thing')

        truncate_file()


查看完整回答
反对 回复 2022-07-26
  • 2 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号