繁体   English   中英

从 .py 文件运行 .py 文件

[英]Running .py files from a .py file

我正在尝试制作一个简单的 AFK 脚本,如果我需要短时间离开我的电脑并且代码可以自行运行但是当我尝试使用一个脚本运行另一个脚本时,它会运行但几秒钟后停止并退出代码 0。我不确定出了什么问题,我尝试了多种方法,例如:

import test1
test1.run()

这似乎行不通。 我找到的每个站点都告诉我使用上面的示例或诸如exec之类的东西,我被告知这是危险的。 注意:必须创建一个名为“bridge”的文本文件,以便可以停止该文件
主程序

import os
from output import run
import keyboard
from time import sleep
print('Start afk program? (Y/N)')
cmd = str.lower(input('> '))
if cmd == 'y':
    print('Use X to Stop')
    print('Starting in 10 seconds...')
    run()
    while True:
        if keyboard.is_pressed('x'):
            print('exit key pressed')
            x = '1'
        else:
            x = '0'
        if os.path.exists('bridge.txt'):
            with open('bridge.txt', 'w') as file:
                file.write(x)
                file.write('\n')
                file.close()
        else:
            exit('file not found')
        if x == '1':
            exit(0)
        sleep(0.1)

output.py

import os
from time import sleep
from pynput.keyboard import Controller
keyboard = Controller()


def run():
    global keyboard
    sleep(10)
    keyboard = Controller()
    count = 0
    while True:
        if os.path.exists('bridge.txt'):
            with open('bridge.txt', 'r') as file:
                content = file.readlines()
                for line in content:
                    if line[0] == '1':
                        exit(0)
        if count == 1:
            press_key('w')
        elif count == 2:
            press_key('a')
        elif count == 3:
            press_key('s')
        elif count == 4:
            press_key('d')
        elif count == 10:
            count = 0
            press_key('q')
        count += 1
        sleep(0.1)


def press_key(key):
    keyboard.press(key)
    sleep(0.5)
    keyboard.release(key)


run()

我知道可以很容易地避免将两个系统分开并将在以后修复,但是这个问题的答案将帮助我进行其他项目

对我来说(Python 3.8),如果您只需在终端上输入,您的代码就可以正常工作

python main.py

如果您注释掉或删除output.py中的最后一行:

# run()

main中导入output后将执行 function run 如果我从本地模块导入,该程序也可以工作

import output                                                                                           
output.run() 

如果由于某种原因您试图从不同的目录导入output ,您可能必须处理相对导入——一个与脚本的具体实现无关的主题。

从最初的检查来看,这段代码似乎有几个问题。 由于您在if keyboard.is_pressed('x'):之前调用run() ,它将始终在无限循环中运行。

此外, if line[0] == '1': ,这需要更改为if line[-1] == '1':以检查输入的最后一个字符,但由于代码从未到达采取x的行作为输入,输入值x也不起作用。

这里存在逻辑错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM