You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python命令行程序调用单个方法时所有方法均执行的问题排查

问题原因分析

你遇到的核心问题是字典初始化时提前执行了所有方法调用。在commands.py的COMMANDS字典里,你写的是"help" : modules.help()这种带括号的形式——这种写法会在字典创建的瞬间就执行对应的方法,而不是等用户输入命令后再触发。这就导致程序一启动,find_time()里的print("Nothing")、input_new_log()里的输入框就先跑出来了,完全不受用户输入的控制。

另外还有个小问题:"find- time"对应的modules.find_time(user)里的user参数,和modules.py中find_time()的无参数定义不匹配,这会导致调用时直接报错,需要一并修正。

解决办法

我们需要把字典里的值改成方法本身(不调用),等用户输入命令后,再取出方法并执行它。具体步骤如下:

1. 修正commands.py的字典定义和执行逻辑

把COMMANDS字典里的方法调用(带括号)改成方法引用(不带括号),然后在execute方法中拿到方法后再执行:

from modules import *
class commands(object):
    def execute(user_input):
        # 现在字典存的是方法本身,不是执行结果
        COMMANDS = {
            # || GENERAL ||
            "help" : modules.help,
            # || FIND ||
            "find- time" : modules.find_time,  # 去掉多余的user参数
            "find- date" : modules.find_date,
            # || INPUT ||
            "input- log: new" : modules.input_new_log
        }
        try:
            # 取出对应的方法
            target_func = COMMANDS[user_input]
            # 这里才执行方法
            execution = target_func()
            return execution
        except KeyError:
            return "ERROR --> No such command"

2. 修正modules.py的参数不匹配问题

确保find_time的方法签名和调用逻辑一致:

import datetime
class modules(object):
    # -- || GENERAL MODULES || ---
    def help():
        return "Action terms:\n'find'\n'input'" + "\n__________\n"
    # --- || 'FIND' MODULES || ---
    def find_time():
        print("Nothing")
        return datetime.datetime.now().time()
    def find_date():
        return datetime.datetime.now().date()
    # --- || 'INPUT' MODULES || ---
    def input_new_log():
        new_user_log = input("> ")
        path = 'C:\\Users\\Guppy\\Projects\\RACHEAL\\RACHEALs Databases\\user_log.txt'
        with open(path, 'w') as log:
            log.write(new_user_log)
        input_new_log_exit_code = 1
        return "EXIT CODE = " + str(input_new_log_exit_code)

3. 测试验证

现在运行rcmd.py,输入find- date后,就会得到你期望的输出:

Guppy\RACHEAL> find- date
FINISHED --> 2017-12-31

(注:这里修正了日期格式,datetime会自动输出合法的年-月-日格式,你原来的2017-31-12是无效格式)

内容的提问来源于stack exchange,提问作者guppythegod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:48:23