最近我看到一篇帖子,说有人制作了一个可以控制电脑的程序.(就是这个)Add commands to user input

在看了一些教程之后,我能够收发邮箱,并开始使用一些命令.首先,我添加了截图功能,这是最重要的功能.然后我添加了函数和命令来做其他事情.然后我想添加一个help命令,如果没有args,则显示所有命令,如果有args,则显示特定命令的描述.我首先添加了一个没有args的,下面是代码:

import json

user_input = "$say hello\n$help"
def help(*args):
    if args == ():
        for func_name, aliases in info_json.items():
            print(func_name)
    else:
        pass
        #print the description for the command

def command1():
    print("I am command 1.")
def command2():
    print("I am command 2.")
def command3():
    print("I am command 3.")
def say(*args):
    print(f"You said i should say \"{' '.join(args)}\"! Very cool :D")
def pause(sec):
    print(f"I waited for {sec} seconds!")

commands = {
    "$help":help,
    "$pause":pause,
    "$say":say,
    "$command1":command1,
    "$command2":command2,
    "$command3":command3,
}
with open("commands.json") as json_file:
    help_json = json.load(json_file)


def call_command(BEFEHL):
    function, *args = BEFEHL.split(' ')
    commands[function](*args)


for line in user_input.split("\n"):
    try:
        call_command(line)
    except KeyError:
        print("This command does not exist.")

我用打印语句替换了实际函数,就像最初的作者那样:D

这段代码运行得很好,我开始对特定函数进行描述.我创建了commands.json个示例:

{
  "command1": ["This command is command 1. It prints out 'I am command 1' "],
  "command2": ["This command is command 2. It prints out 'I am command 2' "],
  "command3": ["This command is command 3. It prints out 'I am command 3' "]
}

有什么方法可以打印出命令背后的json中的内容吗?例如:

>>> $help command1
print("This is command 1. It prints out 'I am command 1' ")

我很想知道这是否可行!:D

推荐答案

加载json时,它基本上就像Python字典一样,因此可以从它的key中检索命令的描述,并将其作为参数传递.

您的help()函数应该如下所示:

def help(*args):
    if args == ():
        for func_name, aliases in help_json.items():
            print(func_name)
    else:
        print(help_json.get(args[0], "Command does not exist"))

第二个参数"Command does not exist"get()在字典中找不到键时打印的默认值.

Python相关问答推荐

二分搜索:没有得到非常大的值的上限和下限

如何在我的 HTML 代码中使用 pyscript 并返回输出

带有Pandas 的ValueError应用函数返回可变形状的输出

在python中用浮点表示搜索和替换特定字符串

从 2D numpy 数组中提取多组行/列

如何使用正则表达式来识别不同行大括号之间的错误?

如何使用 sys.argv 将字符串变量从 shell 脚本传递给 python?

从嵌套 for 循环到字典理解?

根据条件递归地向嵌套字典添加键

将句子拆分为列表时如何保留空格?

有没有一种好方法可以将 pandas 列多索引转换为列类别?

将负数四舍五入到最接近零的 1,000

动态拆分 DataFrame 的列并将其存储为新列

使用“iter”函数会消耗生成器吗?

dask groupby 中元数据的顺序应用

从 python `dataclass` `__repr__` 中排除默认字段

两个数据帧的线性回归

为什么无分支编程和内置程序更慢?

提取二进制numpy数组中的区域

自定义 groupby 函数 pandas python