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 变量也是如此。
在这里,我还添加了 type 和 required 参数来指示期望值的类型并且两个开关都必须出现在命令行中。
目前修复整个脚本:
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)
我需要有关此问题的帮助,我想使用 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 变量也是如此。 在这里,我还添加了 type 和 required 参数来指示期望值的类型并且两个开关都必须出现在命令行中。
目前修复整个脚本:
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)