标签: argparse

Python2.7 argparse.parse_known_args 解析错误

背景 我有一个脚本,我用它parseargs来部分解析输入。

parser = argparse.ArgumentParser()
parser.add_argument("-c", action="store_true")
nspc = parser.parse_known_args()
Run Code Online (Sandbox Code Playgroud)

使用 parseargs 的原因是允许 -c 选项出现在输入中的任何位置。我只想解析这个选项,然后在代码中我自己进行额外的解析。原因是,脚本从配置文件中接受大量参数,即 myscript.py 直到运行时才知道这些参数。

我遇到的问题是,某些参数可能以字母“c.”开头,所以如果我

$ myscript.py "some argument" -cdef
Run Code Online (Sandbox Code Playgroud)

我收到错误

myscript.py:错误:参数-c:忽略显式参数“ef”

因为我说过parser.add_argument("-c", ...我希望它-c会被解析,但-cdef不会。显然,-c是一个可选参数。

我如何告诉解析器这-c是一个选项但-cdef不是?

python python-2.7 argparse

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

在 Python 中使命令行参数可选

我正在使用 ArgParse 在 Python 中提供命令行参数。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--quality", help="enter some quality limit")
args = parser.parse_args()
print "You gave quality = %s" % str(args.quality)
Run Code Online (Sandbox Code Playgroud)

我保存了这个a.py然后运行这个:

$ python a.py --quality 10
You gave quality = 10
Run Code Online (Sandbox Code Playgroud)

我也希望我的代码即使没有提供命令行参数也能运行。我想让它成为可选的。如果它提供了,那么它需要一个可以进一步使用的特定值。

我的代码中有这样的东西:

 if int(quality)==10:
Run Code Online (Sandbox Code Playgroud)

所以如果我不带参数运行:

 $ python a.py
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

TypeError: int() 参数必须是字符串或数字,而不是“NoneType”

python command-line-arguments argparse

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

直接使用argparse打开压缩文件

type=argparse.FileType()我可以通过将 argparse 更改为某些 gzip 类型来直接使用 argparse 打开 gzip 文件吗?它不在文档中,所以我不确定 argparse 是否支持压缩文件类型......

python gzip argparse

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

使用 Tkinter 将 Python argparse CLI 程序转换为 GUI?

我有一个基于 CLI 的简单程序,我想向其中添加 GUI。最好我也希望保留通过 CLI 运行此脚本的能力。如果可以做到这一点,解决这个问题的最佳方法是什么?免责声明:我对 Tkinter 还比较陌生!

from argparse import ArgumentParser
from ipaddress import IPv4Network

def Main():
    """ Main Program """
    parser = ArgumentParser(
        description='Provided a list of IP addresses, format and output the correct fortigate commands to create them')
    parser.add_argument('VDOM', help='Specify a VDOM', type=str)
    parser.add_argument(
        'File', help='Specify a file.  Each entry should be on its own line, and have no extra characters', typ=str)
    args = parser.parse_args()

    with open(args.File, 'r') as input_file:
        array = input_file.read().splitlines()

    with open(args.vdom + '.txt', …
Run Code Online (Sandbox Code Playgroud)

python user-interface tkinter command-line-interface argparse

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

Python 3 argparse 调用函数

需要帮助理解 Python 3 中的 argparse 用例。尝试编写一个使用参数调用各种函数的简单程序。例如:

[程序] [操作] [可选参数]

nachos.py delete 20394739
- or -
nachos.py -d 20394739

nachos.py search 30459389
- or -
nachos.py -s 30459389

nachos.py list
- or -
nachos.py -l
Run Code Online (Sandbox Code Playgroud)

试图弄清楚如何使用 Python 3 实现这一点。请帮忙。谢谢你!

import argparse
parser = argparse.ArgumentParser(description='Example list of options')
parser.add_argument('-d', '--delete', action='delete', help='Delete ID')
parser.add_argument('-s', '--search', action='search', help='Search ID')
parser.add_argument('-l', '--list', action='list', help='List all ID')
args = parser.parse_args()

def (some function to handle each case)
Run Code Online (Sandbox Code Playgroud)

* 更新 *

到目前为止,这似乎有效,但检查可能很长的 if 语句列表似乎又慢又笨拙。有没有办法用一个看起来更具体、更重要的函数来做到这一点?

parser = …
Run Code Online (Sandbox Code Playgroud)

function argparse python-3.x

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

argparse:像帮助字符串一样处理版本字符串

我正在使用 Python 3.6 和 argparse 1.1。

此外-h/--help我想要一个选项-v/--version打印一个带有版本信息的字符串并退出程序(就像使用帮助字符串一样)。但是,当我也有位置参数时,执行

$ example --version
Run Code Online (Sandbox Code Playgroud)

结果是

usage: example ... 
error: too few arguments
Run Code Online (Sandbox Code Playgroud)

变通解决方案

我有一个解决方案,我不喜欢它,因为我需要相当多的代码行来做一些 argparse 可以做得更好的事情。

import sys,argparse

class MyParser(argparse.ArgumentParser):
    def format_help(self):
        return 'Help string\n'

def printversion():
    print('0.0.1')
    sys.exit(1)

if len(sys.argv)>1:
    if len(sys.argv[1])>0:
        if sys.argv[1] in ['--version']:
            printversion()

parser = MyParser()
parser.add_argument('argument',nargs=1,type=int)
parser.add_argument('-v','--version',action='store_true')

args = vars(parser.parse_args())

if args['version']: printversion()
Run Code Online (Sandbox Code Playgroud)

python argparse

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

替换 argparse 中的参数

我有一个无法修改的基类(代码可能有其他错误,但请忽略这些)

class BaseClass(object):
    def __init__(self):
        self.parser = argparse.ArgumentParser()
        self.parser.add_argument("arg1", choices=("a", "b"))
Run Code Online (Sandbox Code Playgroud)

我想要的是覆盖 arg1 如下

class DerivedClass(BaseClass):
    def __init__(self):
        BaseClass.__init__(self)
        self.parser.add_argument("arg1", choices=("a", "c", "d"))
Run Code Online (Sandbox Code Playgroud)

python argparse

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

如何将 argparse args 传递给导入的 python 脚本

假设我有一个可以接受 args 的 python 脚本

# testt.py
import argparse

def main(args):

    print(args.foo)
    print(args.bar)
    print(args.nee)

if __name__ == "__main__":

    parser = argparse.ArgumentParser(description='Test argument parser')

    parser.add_argument('-foo', type=str)
    parser.add_argument('-bar', type=int)
    parser.add_argument('-nee', type=bool)
    args = parser.parse_args()

    main(args)
Run Code Online (Sandbox Code Playgroud)

但不是从命令行运行它,我想从另一个 Python 程序运行它

import testt
Run Code Online (Sandbox Code Playgroud)

我怎么能传入 arg 参数?

python argparse

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

用作变量名时的Python“del”语法错误

我正在构建一个待办事项列表 CLI,它需要一个del参数来从列表中删除一个条目。CLI 用法如下所示

$ ./todo help
Usage :-
$ ./todo add "todo item"  # Add a new todo
$ ./todo ls               # Show remaining todos
$ ./todo del NUMBER       # Delete a todo
$ ./todo done NUMBER      # Complete a todo
$ ./todo help             # Show usage
$ ./todo report           # Statistics
Run Code Online (Sandbox Code Playgroud)

但是在python(我使用的是python 3.8.3)中,当使用argparse模块从命令行解析参数时,上述指定功能的代码如下

parser.add_argument("--del", type=int, help="Delete a todo")

出现问题是因为 del 是 python 的保留关键字,用于完全不同的目的,因此在读取该行代码时会出现语法错误

print (args.del)

语法高亮图像

错误信息如下

File "todo.py", line 24
    if args.del:
            ^
SyntaxError: invalid syntax …
Run Code Online (Sandbox Code Playgroud)

python del argparse python-3.x

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

使用不需要指定输出文件名的可选参数运行 argparse

我已经通读了一堆已经回答的问题,但我没有看到这一点——至少我没有意识到。

我正在使用 argparse 来获取一个文件并将其转换为不同的类型。输入文件名是必需的。输出文件名不是必需的,因为可选参数应该处理它。这是到目前为止的代码:

import sys
import argparse
parser = argparse.ArgumentParser(description='Convert file to new type')
parser.add_argument('--json', type=str, help='Converts to json format')
parser.add_argument('--bibtex', type=str, help='Converts to bibtex format')
parser.add_argument('--html', type=str, help='Converts to html format')
parser.add_argument('inputfilename', type=str, help='enter the original filename')
args = parser.parse_args()
filename=args.filename
if args.json:
    print('Converting to json ...')
    #conversion code here
elif args.bibtex:
    print('Converting to bibtex ...')
    #conversion code here
elif args.html:
    print('Converting to html ...')
    #conversion code here
else:
    print('No conversion type indicated')
Run Code Online (Sandbox Code Playgroud)

问题是,每当我使用这些标志之一。如果我做

$ ./orsconvert.py --json inputfilename …
Run Code Online (Sandbox Code Playgroud)

python arguments optional-arguments argparse

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