使用Python中的参数获取用户输入
TL;DR我需要得到一个包含参数的用户输入,为了做一些事情,我需要我自己的脚本来获得用户输入,就像它自己的解释器一样 我的目标是使用自己的命令创建自己的CLI。 我现在需要的是在python脚本中获取用户输入。我的CLI语法如下:我不知道怎么做使用Python中的参数获取用户输入,python,command-line-interface,Python,Command Line Interface,TL;DR我需要得到一个包含参数的用户输入,为了做一些事情,我需要我自己的脚本来获得用户输入,就像它自己的解释器一样 我的目标是使用自己的命令创建自己的CLI。 我现在需要的是在python脚本中获取用户输入。我的CLI语法如下:我不知道怎么做 COMMAND + ARGUMENT1 + ARGUMENT2 + ARGUMENT3 我想做的示例: say "hi this is a test" hi this is a test 我有一个计划,如何使用参数生成命令, 我创建了一个名为“bin
COMMAND + ARGUMENT1 + ARGUMENT2 + ARGUMENT3
我想做的示例:
say "hi this is a test"
hi this is a test
我有一个计划,如何使用参数生成命令,
我创建了一个名为“bin”的文件夹,并将python脚本放入其中。
python脚本中包含函数。
根据命令类型,要么调用函数do do some,要么打印输出
但是现在,我需要知道如何使用参数获取用户输入。正如@ToTheMax所说的内置argparse模块可以创建复杂的命令行界面
默认情况下,argparse.ArgumentParser.parse_args将从sys.argv向实用程序读取命令行参数,但如果传入数组,它将使用它
您可以将lex拆分为一个字符串的单词数组,就像shell使用shlex.split一样,shlex.split也是内置的。如果像在示例中那样使用引号,它们之间的单词不会像在shell中一样分开
这里有一个完整的例子。请参阅文档,因为这是argparse的一个高级用法。有一节讨论子命令,这就是本例所基于的
导入argparse
导入shlex
def do_sayargs:
什么
parser=argparse.ArgumentParser
subparsers=parser.add_subparsers
say_command=subparsers。添加_解析器“say”
说出命令。添加参数“what”
say_command.set_defaultsfunc=do_say
command='说嗨,这是一个测试'
args=parser.parse\u argsshlex.splitcommand
args.funcargs
cmd模块是生成命令提示符的另一种内置方式,但它不为您进行解析,因此您可能会将其与argparse和shlex结合使用。我意识到我已经有一个问题得到了回答 你可以在这里找到它: 以下是正确的代码:
def command_split(text:str) -> (str,str):
"""Split a string in a command and any optional arugments"""
text = text.strip() # basic sanitize input
space = text.find(' ')
if space > 0:
return text[:space],text[space+1:]
return text,None
x = input(":>")
command,args = command_split(x)
# print (f'command: "{command:}", args: "{args}"')
if command == 'echo':
if args == None:
raise SyntaxError
print (args)
更简单的方法是:
x = input(":>")
if x.split(" ")[0] == 'echo':
echoreturn = ' '.join(x.split(" ")[1:])
print(echoreturn)
我对@rgov帖子的版本:谢谢
import argparse
import shlex
def do_say(args):
print(args.what)
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
say_command = subparsers.add_parser('say')
say_command.add_argument('what')
say_command.set_defaults(func=do_say)
while True:
try:
command = input(":>")
args = parser.parse_args(shlex.split(command))
args.func(args)
except SyntaxError:
print("Syntax Error")
except ValueError:
print("Value Error")
except:
print("")