我正在使用python中的程序之类的命令提示符,用户在其中键入命令,字典找到关联方法,然后使用其中的所有方法访问另一个文件,然后运行一个用户问。
然而,当我尝试运行它们中的任何一个时,它首先打印出除了返回'之外的任何内容。声明,从所有方法中执行所请求的方法。
这是我运行的主要文件。 (rcmd.py)
from commands import *
def get_input():
user = input("Guppy\RACHEAL> ")
return user
def command_line():
# LOOP DETERMINATION VARIABLE
exit = False
while exit == False:
user_input = get_input()
if user_input == "exit":
exit = True
break
elif user_input == "":
get_input()
else:
e = commands.execute(user_input)
print("FINISHED --> " + str(e))
# PROGRAM START LOOP
#
#
command_line()
这是使用字典执行方法(commands.py)
的文件from modules import *
class commands(object):
def execute(user_input):
# DICTIONARY OF COMMANDS
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:
execution = COMMANDS[user_input]
return execution
except KeyError:
return "ERROR --> No such command"
这是包含所有方法的文件 导入日期时间
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)
这是我得到的输出
Guppy\RACHEAL> find- date
Guppy\RACHEAL> Nothing
>
FINISHED --> 2017-31-12
我应该去哪里
Guppy\RACHEAL> find- date
FINISHED --> 2017-31-12
如果有人知道为什么这不正常,或者我做错了什么,那将非常感激。
答案 0 :(得分:1)
问题在于您在COMMANDS
中定义commands.py
:
# DICTIONARY OF COMMANDS
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()
}
在这里,您要将每个值设置为函数的输出,而不是函数本身。看起来应该更像这样:
# DICTIONARY OF COMMANDS
COMMANDS = {
# || GENERAL || #
"help" : modules.help,
# || FIND || #
"find- time" : modules.find_time,
"find- date" : modules.find_date,
# || INPUT || #
"input- log: new" : modules.input_new_log
}
您还必须将行execution = COMMANDS[user_input]
更改为execution = COMMANDS[user_input]()
。这将为您提供您正在寻找的输出。
答案 1 :(得分:1)
问题在于构建要调用的函数字典的方式。
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()
}
对于字典中的每个条目,您调用该函数,并将调用该函数的结果分配给该条目。您需要做的是分配对该函数的引用。注意没有括号。
COMMANDS = {
# || GENERAL || #
"help" : modules.help,
# || FIND || #
"find- time" : modules.find_time,
"find- date" : modules.find_date,
# || INPUT || #
"input- log: new" : modules.input_new_log
}
然后,您需要在字典中查找后调用该函数:
function= COMMANDS[user_input]
return function()
请注意导致在此处调用函数的额外括号。
此外,您与find_time()
不一致。在字典构造函数中,您传递了一个patameter,但该函数似乎并不期望这样。