第一次在这里发布,如果我不遵循格式指南或其他任何内容,因此深表歉意。
我正在写一个类似于终端的实用工具,用于批量文件编辑。我的目标是使每个功能成为三个字母ling,有点像在Assembly中。例如,mkd("yeet")
创建一个名为yeet的目录。
它的基本工作方式如下:我定义了一堆函数,然后设置了一个while True
循环,该循环打印出我键入的eval()
。
到目前为止,除了一件事之外,其他所有方面都进展顺利。我希望能够在不添加括号的情况下调用函数。之后应添加任何参数,例如使用sys.argscv[1]
。
在Python中是否可行?
很显然,仅键入函数名称将返回<function pwd at 0x7f6c4d86f6a8>
或类似内容。
先谢谢了,
海象胶靴
答案 0 :(得分:3)
您可以根据范围使用locals
或globals
并传递在参数中获得的字符串:
>>> def foo():
... print("Hi from foo!")
...
>>> locals()["foo"]()
Hi from foo!
调用"foo"
时sys.args[1]
将是python script.py foo
或者您可以使用可用命令定义自己的字典,例如:
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
答案 1 :(得分:0)
在Python中,不,您确实需要括号来调用函数。
不过,您可能会发现cmd模块很有用-它用于编写您正在描述的交互式命令行工具,并且在输入格式方面具有更大的灵活性。
使用cmd
,您的工具可能类似于:
import cmd, os
class MyTerminalLikeUtilityTool(cmd.Cmd):
def do_mkd(self, line):
os.makedirs(line)
def do_EOF(self, line):
return True
if __name__ == '__main__':
MyTerminalLikeUtilityTool().cmdloop()
答案 2 :(得分:0)
click library是我使用的一个库,我认为它非常适合创建命令行应用程序。这是youtube video,显示了如何创建示例应用程序。
Here是网站上有关点击如何不使用argeparse
的解释。
答案 3 :(得分:0)
否,不可能。没有具有以下格式的有效语法
JCasC:
enabled: true
PluginVersion: 1.11
SupportPluginVersion: 1.11
ConfigScripts:
welcome-message: |
jenkins:
systemMessage: Welcome to our CI\CD server. This Jenkins is configured and managed 'as code'.
github-oauth: |
jenkins:
securityRealm:
github:
githubWebUri: "https://github.com"
githubApiUri: "https://api.github.com"
clientID: "<some-id>"
clientSecret: "<some-secret>"
oauthScopes: "read:org,user:email,repo"
github-org-lock: |
jenkins:
authorizationStrategy:
globalMatrix:
grantedPermissions:
- "Overall/Administer:<some-org>"
在python中。您需要支持该语言的语言(例如Scala)或具有宏的语言(例如lisp / clojure)
您能做的最接近的事情是,例如,使函数成为可调用对象,重载二进制移位运算符,并编写类似的内容
f 1 2
答案 4 :(得分:0)
这是一个简单的示例,如果您想自己解析字符串,则很容易扩展。
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)