Python 如何使用argparse读取命令行的剩余部分?
首先,我为这个糟糕的标题感到抱歉。事实上,我不能正确地表达总结大概是我目前80%的问题 我正在编写一个命令行程序来包装其他命令行程序,如下所示:Python 如何使用argparse读取命令行的剩余部分?,python,command-line-arguments,argparse,Python,Command Line Arguments,Argparse,首先,我为这个糟糕的标题感到抱歉。事实上,我不能正确地表达总结大概是我目前80%的问题 我正在编写一个命令行程序来包装其他命令行程序,如下所示: my_wrapper.py --some options -for --the wrapper original_program --and its -options $ ./prog.py -- somecommand --somearg --someotherarg Namespace(commands=['somecommand', '--so
my_wrapper.py --some options -for --the wrapper original_program --and its -options
$ ./prog.py -- somecommand --somearg --someotherarg
Namespace(commands=['somecommand', '--somearg', '--someotherarg'])
在某些情况下,此命令将替换对原始程序的调用:
original_program --and its -options
我想提取包装器所需的选项,但保持原始程序名和参数不变,顺序完全相同。我不能对包装程序的参数做任何假设
使用argparse是否可以做到这一点?怎么做
我认为使用(已弃用的)optparse
模块,只需从行中读取args
即可
(options, args) = parser.parse_args()
对于好奇的人来说,包装器的目标是帮助用户在HPC集群上提交作业。它的职责是处理编写定制脚本、启动脚本和检索结果的所有特殊需求 您可以使用--
作为分隔符。简单的例子:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('commands', type=str, nargs='+')
print(parser.parse_args())
然后像这样打电话:
my_wrapper.py --some options -for --the wrapper original_program --and its -options
$ ./prog.py -- somecommand --somearg --someotherarg
Namespace(commands=['somecommand', '--somearg', '--someotherarg'])
从bash手册:
--
表示选项结束,并禁用进一步的选项处理。
--
后面的任何参数都被视为文件名和参数。
-的参数相当于--
其他选项正在使用
例如:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('command', type=str)
parser.add_argument('-s', '--somearg', type=str)
args, unknown = parser.parse_known_args()
print(args)
print(unknown)
并运行:
$ ./prog2.py --somearg option test --other
Namespace(command='test', somearg='option')
['--other']
$ ./prog2.py --somearg option test --other --second
Namespace(command='test', somearg='option')
['--other', '--second']
正如@hpaulj所说,您可以使用
nargs=argparse.rements
。文档中的示例:
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--foo')
>>> parser.add_argument('command')
>>> parser.add_argument('args', nargs=argparse.REMAINDER)
>>> print parser.parse_args('--foo B cmd --arg1 XX ZZ'.split())
Namespace(args=['--arg1', 'XX', 'ZZ'], command='cmd', foo='B')
+1用于
parse\u known\u args
,这是argparse
的真正工作parse_args
只是一个包装器,它调用parse_known_args
并引发异常,除非返回值的第二个元素为空。nargs=argparse.rements
是另一个工具。谢谢@hpaulj这正是我想要的。几年后你来营救的。可能是