标签: argparse

Python argparse并控制/覆盖退出状态代码

除了修改argparse源代码外,如果parse_args()在调用时遇到问题,有没有办法控制退出状态代码,例如,缺少必需的开关?

python argparse

39
推荐指数
4
解决办法
3万
查看次数

如何在Python 2.6中获得argparse?

我编写了一些使用argparse模块的Python 2.7代码.现在我需要在Python 2.6机器上运行它,因为在2.7中添加了argparse,它将无法工作.

无论如何我可以在2.6中获得argparse吗?我想避免重写代码,因为我会经常在机器之间传输这种代码.升级python不是一个选择.

我应该澄清一下,理想的解决方案是不需要安装模块的东西.

python argparse

39
推荐指数
4
解决办法
6万
查看次数

如何使用argparse为参数创建可选值?

我正在创建一个python脚本,我希望有一个参数来操作你输出的搜索结果数量.我现在已经命名了这个论点--head.这是我希望它拥有的功能:

  1. 如果--head没有在命令行传递,我希望它默认为一个值.在这种情况下,一个相当大的,像80

  2. --head没有任何值传递时,我希望它默认为另一个值.在这种情况下,有限的东西,如10

  3. --head传递一个值时,我希望它存储它传递的值.

以下是一些描述问题的代码:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-h',
                        '--head',
                        dest='size',
                        const=80,
                        default=10,
                        action="I don't know",
                        help='Only print the head of the output')
>>> # OFC, that last line will fail because the action is uknown,
... # but here is how I'd like it to work
... parser.parse_args(''.split())
Namespace(size=80)
>>> parser.parse_args('--head'.split())
Namespace(size=10)
>>> parser.parse_args('--head 15'.split())
Namespace(size=15)
Run Code Online (Sandbox Code Playgroud)

我知道我可能会为此编写自定义操作,但我首先想看看是否有任何默认行为.

python argparse python-3.x

38
推荐指数
1
解决办法
1万
查看次数

使用argparse时从环境变量设置选项

我有一个脚本,它具有某些选项,可以在命令行上传递,也可以从环境变量传递.如果两者都存在,则CLI应该优先,如果两者都没有,则会发生错误.

我可以检查解析后是否分配了该选项,但我更喜欢让argparse执行繁重的工作并负责在解析失败时显示用法语句.

我已经提出了几种替代方法(我将在下面作为答案发布,以便可以单独讨论),但他们觉得我很笨,我认为我错过了一些东西.

是否有一种被接受的"最佳"方式?

(编辑以在未设置CLI选项和环境变量时清除所需的行为)

python argparse

37
推荐指数
6
解决办法
2万
查看次数

使用argparse模块打印程序用法示例

我正在尝试学习如何使用python的argparse模块.目前我的python脚本是:

parser = argparse.ArgumentParser(description='My first argparse attempt',
                                add_help=True)
parser.add_argument("-q", action ="store", dest='argument',
                    help="First argument")
output = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

它将输出提供为:

usage: test.py [-h] [-q ARGUMENT]

My first argparse attempt

optional arguments:
  -h, --help   show this help message and exit
  -q ARGUMENT  First argument
Run Code Online (Sandbox Code Playgroud)

现在,让我们假设我希望我的-h or --help论点也打印出来usage example.喜欢,

   Usage: python test.py -q "First Argument for test.py"
Run Code Online (Sandbox Code Playgroud)

我的目的是打印上面的用法示例以及-h参数的默认内容,以便用户可以基本了解如何使用test.pypython脚本.

那么,这个功能是否在argparse模块中内置.如果不是什么是正确的方法来解决这个问题.

python argparse

36
推荐指数
1
解决办法
2万
查看次数

我希望Python argparse抛出异常而不是使用

我不认为这是可能的,但我想自己处理来自argparse的异常.

例如:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo help', required=True)
try:
    args = parser.parse_args()
except:
    do_something()
Run Code Online (Sandbox Code Playgroud)

当我运行它:

$ myapp.py
usage: myapp --foo foo
myapp: error: argument --foo is required
Run Code Online (Sandbox Code Playgroud)

但我希望它落入例外.

python argparse

36
推荐指数
2
解决办法
2万
查看次数

Python参数解析器列表或元组元组

我正在尝试使用参数解析器来解析3D坐标,以便我可以使用

--cord 1,2,3 2,4,6 3,6,9
Run Code Online (Sandbox Code Playgroud)

得到

((1,2,3),(2,4,6),(3,6,9))
Run Code Online (Sandbox Code Playgroud)

我的尝试是

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--cord', help="Coordinate", dest="cord", type=tuple, nargs=3)
args = parser.parse_args(["--cord","1,2,3","2,4,6","3,6,9"])

vars(args) 
{'cord': [('1', ',', '2', ',', '3'),
  ('2', ',', '4', ',', '6'),
  ('3', ',', '6', ',', '9')]}
Run Code Online (Sandbox Code Playgroud)

替换逗号会是什么?

python argparse

35
推荐指数
1
解决办法
1万
查看次数

使用argparse和多个-v选项的详细级别

我希望能够通过向命令行添加更多-v选项来指定不同的详细级别.例如:

$ myprogram.py    
$ myprogram.py -v
$ myprogram.py -vv
$ myprogram.py -v -v -v
Run Code Online (Sandbox Code Playgroud)

会导致verbose = 0,verbose = 1,verbose = 2,verbose = 3.如何使用argparse实现这一目标?

可选地,它也可以很好地指定它

$ myprogram -v 2
Run Code Online (Sandbox Code Playgroud)

python argparse

34
推荐指数
4
解决办法
1万
查看次数

python argparse中的自定义选项卡完成

如何argparse在Python脚本中使用shell选项卡完成协作?

#!/usr/bin/env python
import argparse

def main(**args):
    pass

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('positional', choices=['spam', 'eggs'])
    parser.add_argument('--optional', choices=['foo1', 'foo2', 'bar'])
    args = parser.parse_args()
    main(**vars(args))
Run Code Online (Sandbox Code Playgroud)

在.py文件上设置可执行标志后,预期结果应为:

$ ./example.py sp<tab>             
   ->  completes to "./example.py spam"
$ ./example.py --op<tab> 
   ->  completes to "./example.py --optional"
$ ./example.py --optional b<tab>
   ->  completes to "./example.py --optional bar"
$ ./example.py --optional f<tab>   
   ->  completes to "./example.py --optional foo"
       and, additionally, prints  "foo1  foo2"  choices on stdout on a new line
Run Code Online (Sandbox Code Playgroud)

python bash command-line-interface tab-completion argparse

34
推荐指数
2
解决办法
1万
查看次数

Python的argparse用prog和版本字符串格式显示程序的版本

在argparse中指定程序名称和版本信息的首选方法是什么?

__version_info__ = ('2013','03','14')
__version__ = '-'.join(__version_info__)
...
parser.add_argument('-V', '--version', action='version', version="%(prog)s ("+__version__+")")

python version argparse

34
推荐指数
2
解决办法
1万
查看次数