python, argparse 从输入中获取参数- raw_input

python, argparse get argument from input- raw_input

我需要有关此问题的帮助,我想使用 argparse 从用户输入中获取参数并将其保存到变量并打印出结果

示例: 要发送的消息

-t Greeting -m hello guys how are you

打印出:

greeting hello guys how are you

这是我的代码:

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 时,它工作正常,但当您输入一个以上的单词时,它不起作用。为什么?

通常,当您通过 add_argument 方法声明命令行开关时,python 认为只有下一个 world/value 应该是存储在结果变量中。这就是以下工作正常的原因:

-t hello -m world

而以下内容:

-t greetings -m hello world

returns 类似于:

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 变量也是如此。 在这里,我还添加了 typerequired 参数来指示期望值的类型并且两个开关都必须出现在命令行中。


目前修复整个脚本:

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

结果。

这里有 2 个选项。要么像这样用空格引用参数:

-t Hi -m "Hello word1 word2"

使用。要使用 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)