python,argparse从input-raw_input获取参数

时间:2018-01-24 21:10:08

标签: python argparse raw-input

我需要有关此问题的帮助,我想使用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时,它可以正常工作,但是当您输入多个单词时,它就无法正常工作。为什么呢?

2 个答案:

答案 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

结果。