我需要有关此问题的帮助,我想使用argparse
从用户输入中获取参数,将其保存到变量并打印出结果
实施例: 要发送的消息:
-t问候 - 你好伙计们你好吗
打印:
问候你好伙计们你好吗
这是我的代码:
import argparse, shlex
parser = argparse.ArgumentParser()
parser.add_argument('-t', action='store', dest='title')
parser.add_argument('-m', action='store', dest='msg')
command = raw_input('message to send')
args = parser.parse_args(shlex.split(command))
title = args.title
msg = args.msg
print title, msg
当您输入-t hi -m hello
时,它可以正常工作,但是当您输入多个单词时,它就无法正常工作。为什么呢?
答案 0 :(得分:2)
这里有2个选项。用这样的空格引用参数:
-t Hi -m "Hello word1 word2"
或
使用davinellulinvega's answer。要使用nargs='*'
取回整个字符串,您必须:
parser.add_argument('-t', action='store', dest='title', nargs='*')
parser.add_argument('-m', action='store', dest='msg', nargs='*')
....
title = ' '.join(args.title)
msg = ' '.join(args.msg)
答案 1 :(得分:1)
通常,当您通过 add_argument 方法声明命令行开关时,python认为只应将下一个world / value存储在结果变量中。这就是为什么以下工作正常:
-t hello -m world
以下内容:
-t greetings -m hello world
返回类似的内容:
greetings hello
使用nargs,您可以告诉python应该在最终变量中存储多少个值。 例如,如果您将命令行切换为:
,则在代码中parser.add_argument('-t', action='store', dest='title', nargs='*', type=str, required=True)
parser.add_argument('-m', action='store', dest='msg', nargs='*', type=str, required=True)
Python知道 -t 开关后的所有值都应存储在名为 title 的列表中。 -m 开关和 msg 变量也是如此。 在这里,我还添加了类型和必需参数,以指示预期的值类型,并且两个开关都必须出现在命令行中。
到目前为止修复整个脚本:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-t', action='store', dest='title', nargs='*', type=str, required=True)
parser.add_argument('-m', action='store', dest='msg', nargs='*', type=str, required=True)
args = parser.parse_args()
print(" ".join(args.title), " ".join(args.msg))
您所要做的就是按照以下步骤调用您的脚本:
python3 your_script.py -t greetings -m hello world
这应该打印:
greetings hello world
结果。