【问题标题】:How can I use the content of a file as a condition?如何使用文件的内容作为条件?
【发布时间】:2021-09-29 04:50:29
【问题描述】:

我在我的电脑上安装了 AutoKey,这样我就可以用键盘执行 python 文件,我想要做的是将脚本作为循环执行,但也能够停止它。

脚本按下我键盘上的“d”键,等待大约 2.4 秒,然后按下“s”。我认为这是个好主意:

import time
import random
from pynput.keyboard import Key, Controller

keyboard = Controller()

file = open("file.txt", "r+")
file.write("1")

while file.read == 1:
    keyboard.press("d")
    time.sleep((random.randrange(24075, 24221))/10000)
    keyboard.release("d")
    keyboard.press("s")
    time.sleep((random.randrange(24075, 24221))/10000)
    keyboard.release("s")

file.close()

以及另一个使用不同热键执行以停止前一个脚本的文件:

def main() :

    file = open("file.txt", "w")
    file.write("0")
    file.close()

main()

我发现的问题是这不起作用。当我执行第一个脚本时,它只是没有转到while 部分,就像它没有检测到应该启用的那样。

有没有更简单的方法可以做到这一点,还是我只是在某个地方搞砸了,我找不到它?

【问题讨论】:

  • 您没有调用该函数。阅读后您缺少(),这就是不满足条件的原因。

标签: python loops file while-loop


【解决方案1】:

问题是您在读取文件之前没有将文件中的光标位置设置为开头。因此,当您运行它时,它会读取文件,而文件中的光标位于文件末尾。所以返回的字符串总是空的,所以它会停止 while 循环。 使用file.seek(0),您可以将光标位置设置为文件的开头。我还建议使用with 语句。当您退出缩进时,这会自动关闭文件。我的做法是这样的:

import time
import random
from pynput.keyboard import Key, Controller

keyboard = Controller()

with open("file.txt", "r+") as file:
    file.write("1")
    file.seek(0)

    while file.read() == "1":
        keyboard.press("d")
        time.sleep((random.randrange(24075, 24221))/10000)
        keyboard.release("d")
        keyboard.press("s")
        time.sleep((random.randrange(24075, 24221))/10000)
        keyboard.release("s")
        file.seek(0)

这用于停止上述脚本:

def main() :
    with open("file.txt", "w") as file:
        file.write("0")

main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2019-06-16
    相关资源
    最近更新 更多