我可以调用没有括号的Python函数,比如shell命令。如果是,怎么做?

2024-05-14 10:54:22 发布

您现在位置:Python中文网/ 问答频道 /正文

第一次张贴在这里,所以道歉,如果我没有遵循格式准则或任何东西。你知道吗

我正在为批量文件编辑编写一个类似终端的实用工具。我的目标是使每个函数都是三个字母ling,有点像在汇编中。例如,mkd("yeet")生成一个名为yet的目录。
它的基本工作方式如下:我定义了一大堆函数,然后我建立了一个while True循环,它打印我键入的任何函数的eval()。 到目前为止,一切都很顺利,除了一件事。我希望能够调用函数而不必添加括号。之后应该添加任何参数,比如使用sys.argscv[1]。你知道吗

这是一个link to the GitHub repo。你知道吗

在Python中这是可能的吗?如果可能,怎么可能?你知道吗

很明显,只要输入函数名就会返回me<function pwd at 0x7f6c4d86f6a8>或类似的内容。你知道吗

提前谢谢,
海象胶靴


Tags: 文件函数目录终端编辑目标格式字母
3条回答

这里有一个简单的例子,如果你想自己解析这个字符串,它很容易扩展。你知道吗

def mkd(*args):
    if len(args) == 1:
        print("Making", *args)
    else:
        print("mdk only takes 1 argument.")

def pwd(*args):
    if len(args) == 0:
        print("You're here!")
    else:
        print("pwd doesn't take any arguments.")

def add(*args):
    if len(args) == 2:
        if args[0].isdigit() and args[1].isdigit(): 
            print("Result:", int(args[0]) + int(args[1]))
        else:
            print("Can only add two numbers!")
    else:
        print("add takes exactly 2 arguments.")

def exit(*args):
    quit()


functions = {'mkd': mkd, 'pwd': pwd, 'add': add, 'exit': exit}  # The available functions.  

while True:
    command, *arguments = input("> ").strip().split(' ')  # Take the user's input and split on spaces.
    if command not in functions:
        print("Couldn't find command", command)
    else:
        functions[command](*arguments)

您可以使用^{}^{},具体取决于作用域和传递参数中得到的字符串:

>>> def foo():
...     print("Hi from foo!")
... 
>>> locals()["foo"]()
Hi from foo!

其中"foo"将是对python script.py foo的调用中的sys.args[1]

也可以使用可用命令定义自己的词典,例如:

calc.py

commands = {
    "add" : lambda x, y: x + y,
    "mul" : lambda x, y: x * y,
}

if __name__ == __main__:
    import sys
    _, command, arg1, arg2, *_ = sys.args
    f = commands.get(command, lambda *_: "Invalid command")
    res = f(int(arg1), int(arg2))
    print(res)

正在调用python calc.py add 5 10

click library是我使用过的库,在我看来,它非常适合创建命令行应用程序。下面是一个youtube video演示如何创建示例应用程序。你知道吗

Here是站点关于click如何不使用argeparse的解释。你知道吗

相关问题 更多 >

    热门问题