猿问

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

我正在使用 Pynput 创建一个程序,简而言之,它会在按住键时执行某些操作。


在对 Pynput 进行了一些研究之后,我发现没有办法,而且似乎没有计划的方法可以在按住键的同时做某事,所以我正在设计我的方法。


我的计划是让两个 Python 脚本同时运行,它们之间有一个不断更新的变量。这是因为当在一个程序中使用时,while 循环会停止 Pynput 侦听器。其中一个脚本将监听键盘并相应地更新变量,另一个将实际执行结果。


唯一的问题是我不知道如何在两个正在运行的脚本之间主动链接变量,并且互联网上没有任何东西让我知道如何这样做(我尝试过导入其他脚本和东西,但不仅是这很困难,因为我使用的是 Mac,但它没有主动传递变量)。


目前,我的代码看起来有点像这样:


(侦听器脚本)


from pynput import keyboard


doThing = 0


def on_press(key):

    doThing = 1


def on_release(key):

    doThing = 0


def startListener():

    listener = keyboard.Listener(

        on_press=on_press,

        on_release=on_release)

    listener.join()

(做某事的脚本)


while True:

    if doThing == 1:

        print('Thing')

我想在它们之间链接的变量是 doThing,但我不知道我将如何实际设置变量。我正在考虑使用 JSON,但我不知道这是否是最好的方法。


ITMISS
浏览 87回答 2
2回答

catspeake

这是一个使用线程的示例。这允许 Python 运行两个(或更多)单独的线程,每个线程同时做不同的事情。(从技术上讲,它们实际上并不是同时发生的,而是交替发生的,但这在这种情况下并不重要)。在一个线程中,您监听按键。在另一个线程中,您检查关键状态并做出适当反应。import threadingfrom pynput import keyboardclass 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")

慕村9548890

您已经考虑使用临时文件了吗?这是示例:from pynput import keyboarddoThing = 0def 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 = 0def 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()
随时随地看视频慕课网APP

相关分类

Python
我要回答