Есть ли способ остановить модуль, который был запущен с помощью runpy.run_module(«модуль»)?

#python #runpy

Вопрос:

Я пытаюсь начать discord.py бот, который находится в другом файле py и может успешно запустить бота, однако я не уверен, как выйти/остановить скрипт, как только я его запустил. ctrl c работает, если я нахожусь в оболочке, однако у меня есть скрипт pyqt, запускающий модуль, и я хотел бы сохранить пусковую установку, не закрывая ее.

 @click.group(invoke_without_command=True, options_metavar='[options]')
@click.pass_context
@click.option('-c', '--cli', help='launch hangoutcore without a gui.', is_flag=True)
def main(ctx, cli):
    """Launches the bot."""
    if ctx.invoked_subcommand is None:
        # since cli is a bool we can pass it as an environment variable so it can be accessed by any code running in this session.
        os.environ["bot_CLI"] = str(cli)
        print(os.environ["bot_CLI"])
        if not cli:
            try:
                qasync.run(botLauncher())
            except asyncio.exceptions.CancelledError as e:
                print(e)
        else:
            try:
                hangoutcore = runpy.run_module('hangoutcore')
                print(hangoutcore)

            except SystemExit as exception:
                exitcode = exception.code
            else:
                exitcode = 0
 

Ответ №1:

Было бы лучше провести рефакторинг hangoutcore , чтобы вы делали важные вещи только тогда, когда вы что-то в нем вызываете, например

 import discordpy, eris, apple, fnord

# ... lots of bot logic

def run():
   ...

 

и тогда вы сможете просто

 import hangoutcore
 

когда угодно, а затем позвоните

 hangoutcore.run()
 

когда ты хочешь сделать главное.