标签: argparse

使用 argparse 调用函数

我试图在输入 -a 时通过 argparse 调用函数 addPXT。它不这样做。阅读另一个问题,addPXT 不在冒号中,尝试说 addPXT 不可调用。

parser = argparse.ArgumentParser()
parser.add_argument('-a' ,action='store_const'  ,const='addPXT')
results = parser.parse_args()

def addPXT():
        print "hello"
Run Code Online (Sandbox Code Playgroud)
    python script.py -a
Run Code Online (Sandbox Code Playgroud)

python python-2.7 argparse

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

python3 argparse自动完成失败

当我在 python3 中使用 arparse 时,我发现了一些奇怪的事情。

#!/usr/bin/env python3

import argparse

def create_parser():
    p = argparse.ArgumentParser(add_help=True)
    p.add_argument('-i', help='i parameter', required=True)
    p.add_argument('-m', help='m parameter', required=True)
    return p

if __name__ == '__main__':
    p = create_parser()
    n = p.parse_args()
    print(n)
Run Code Online (Sandbox Code Playgroud)

当我尝试启动它时

python3 ./script.py -i ./some_folder/some_file -m ./
Run Code Online (Sandbox Code Playgroud)

bash 自动完成与“-i”参数一起工作,但不能与“-m”一起工作。例如,如果我将“-m”重命名为“-me”,则一切正常。

在 bash 中,我尝试使用“-m”参数启动其他命令,但它不仅适用于 argparse。这里哪里会出错?

bash argparse python-3.x

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

argparse:如何要求一组并非全部互斥且并非全部可选的 args?

我试图在argparse. 但是,我有两个问题:

  1. 并非所有的论点都是相互排斥的。
  2. 即使它们都是互斥的,互斥组也要求参数是可选的,并且主函数search(不是必需的)使用位置参数。

理想情况下,我认为'search'是主要功能。因此,我希望它的参数是位置性的;虽然,search不是必需的。但是,至少需要以下一项: search, --name, --list, --add, --import, --encrypt, --decrypt, --delete-database, --rename-database, --backup

另外,--name不是相互排斥的选项,它是那种多用途:

  • 如果它被自身调用,并且它的参数(数据库的名称)不存在,则将创建它。
  • 如果(数据库)确实存在,则将其用作调用它的任何其他选项函数的参数:例如, -n myfirstdb --decrypt
  • 而如果--name不存在,我假设最近访问的数据库。

目前,我必须运行一个开始变得繁重的检查,以查看是否调用了任何主要选项,并测试是否--name存在。

最后,显然互斥的选项不能一起使用。

我怎样才能search成为这个必需的互斥群体的一部分?我怎样才能成为--name这个必需的组中的一个,但又不与其中任何一个互斥?

我正在试验子解析器,但我不确定它们是否能解决我的问题。任何建议都可能为我节省几天的反复试验时间,非常感谢。

parser.add_argument(
    'search', nargs='*', type=str, metavar='S', help='search [field] for string(s)')
parser.add_argument(
    '--name', '-n', type=str, help='name of the database; created if does not exist')

main_ex_group = parser.add_argument_group(
    title='main functions').add_mutually_exclusive_group()
main_ex_group.add_argument(
    '--list', '-l', action='store_true', help='list …
Run Code Online (Sandbox Code Playgroud)

python command-line command-line-arguments argparse python-3.x

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

如何从父解析器获取 argparse 子解析器(检查默认值)

假设我创建了一个带有参数默认值的解析器,然后给它一个带有参数默认值的子解析器。

In [1]: parser = argparse.ArgumentParser(description='test')

In [2]: parser.add_argument("--test", dest="test", default="hello")
Out[2]: _StoreAction(option_strings=['--test'], dest='test', nargs=None, const=None, default='hello', type=None, choices=None, help=None, metavar=None)

In [3]: parser.get_default("test")
Out[3]: 'hello'

In [4]: subparsers = parser.add_subparsers(dest="command")

In [5]: parser_other = subparsers.add_parser("other")

In [6]: parser_other.add_argument("--other-test", dest="other_test", default="world")
Out[6]: _StoreAction(option_strings=['--other-test'], dest='other_test', nargs=None, const=None, default='world', type=None, choices=None, help=None, metavar=None)

In [7]: parser_other.get_default("other_test")
Out[7]: 'world'
Run Code Online (Sandbox Code Playgroud)

这一切都很好。但是假设我有一个函数parser从上面创建并返回父解析器,但不能直接访问子解析器。

我怎样才能打印出子解析器参数的默认值?或者分别获取每个子解析器的句柄?

In [8]: parser._subparsers._defaults
Out[8]: {}

In [9]: parser._subparsers.get_default("other_test")  # is None
Run Code Online (Sandbox Code Playgroud)

似乎没有从任何更多的属性或方法,parser._subparsersparser可能显示的默认值。

总体问题是:当您只有父解析器的句柄时,如何以编程方式访问子解析器默认值?

python parsing arguments argparse subparsers

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

Python argparse:列出用法中的各个选项

我有一个需要多个参数的程序,例如

breakfast.py --customer=vikings eggs sausage bacon
Run Code Online (Sandbox Code Playgroud)

其中“鸡蛋”、“香肠”和“培根”可以从特定选项列表中指定。

现在我喜欢这样的输出breakfast.py --help

usage: breakfast.py [-h] [--customer CUSTOMER] INGREDIENT [INGREDIENT ...]

positional arguments:
  your choice of ingredients:
    bacon              Lovely bacon
    egg                The runny kind
    sausage            Just a roll
    spam               Glorious SPAM
    tomato             Sliced and diced

optional arguments:
  -h, --help           show this help message and exit
  --customer CUSTOMER  salutation for addressing the customer
Run Code Online (Sandbox Code Playgroud)

我尝试了两种方法,但到目前为止都失败了。

使用参数选择:

import argparse

parser = argparse.ArgumentParser()

toppings = {
    'bacon': "Lovely bacon",
    'egg': 'The runny kind',
    'sausage': 'Just a …
Run Code Online (Sandbox Code Playgroud)

python argparse

0
推荐指数
2
解决办法
4242
查看次数

NameError:未定义名称“argparse”

我正在使用 python 3.7.4,这是我的代码,但它不起作用。这是python写的ssrf扫描器,我刚开始学习'argparse'所以不知道代码有什么问题:

import sys
import argparse

error = "Please enter a valid command. If you don't know how to use, enter '--help'"
parser = argparse.ArgumentParser(version='1.0')
parser.add_argument('-u', help='URL', dest='url')
parser.add_argument('--get', help='Method GET', dest='get')
parser.add_argument('--post', help='Method POST', dest='post')
parser.add_argument('-i', help='Ip', dest='ip')
parser.add_argument('-p', help='Port', dest='port')
parser.add_argument('-d', help='Post data', dest='param')
parser.add_argument('--encode', help='Encode payloads', dest='encode')
parser.add_argument('--proxy', help='Use proxy(y|ies)',
                    dest='proxy', action='store_true')
parser.add_argument('-f', help='Load payloads from a file', dest='file')
parser.add_argument('-h', help='Add headers',
                    dest='header', const=True)
parser.add_argument('--white', help='Whitelist', dest='wlist')
parser.add_argument('--black', help='Blacklist', dest='blist')

url = args.url
get = args.get …
Run Code Online (Sandbox Code Playgroud)

argparse

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

Argparser 返回“--mode=client --port=52085”并崩溃

每当我使用时parser.parse_args(),内核就会崩溃。例如:

import argparse
import numpy as np

parser = argparse.ArgumentParser()
parser.add_argument("--return_counts", type=bool, default=True)

opt = parser.parse_args()

arr = np.random.randint(0, 10, 100)
Run Code Online (Sandbox Code Playgroud)

它给出了这个错误:

用法:pydevconsole.py [-h] [--return_counts RETURN_COUNTS]
pydevconsole.py:错误:无法识别的参数:--mode=client --port=52085

但是,如果我使用parser.parse_known_args(),它会起作用。

import argparse
import numpy as np

parser = argparse.ArgumentParser()
parser.add_argument("--return_counts", type=bool, default=True)

opt, unknown = parser.parse_known_args()

arr = np.random.randint(0, 10, 100)
Run Code Online (Sandbox Code Playgroud)

它有效,并opt给出了这个:

print(opt)
Out[3]: Namespace(return_counts=True)
Run Code Online (Sandbox Code Playgroud)

unknown给出了这个:

Out[4]: ['--mode=client', '--port=52162']
Run Code Online (Sandbox Code Playgroud)

有人可以解释这背后的巫术吗?

python argparse

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

是否将 eval 与 argparse save 一起使用?

我使用 argparse 和 eval 来更改日志记录的日志级别。

parser = argparse.ArgumentParser(
        description="Adds New Location to the Snipe-IT Server")
parser.add_argument('-l', '--loglevel', type=str, default='WARNING', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'])
args = parser.parse_args()
logging.basicConfig(level=eval(f"logging.{args.loglevel}"))
Run Code Online (Sandbox Code Playgroud)

我想知道在这种情况下使用 eval 是否可以节省?我不知道在这种情况下选择是否会限制输入。

python logging argparse

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

Argparse URL 类型

让我们有一个简单的 argparser,其中一个参数代表 URL。

from argparse import ArgumentParser

def my_url(arg):
"""
Some url validation

"""

parser = ArgumentParser(
    description="foobar"
)
parser.add_argument(
    "-u",
    "--url",
    type=my_url,
    help="foobar",
)
Run Code Online (Sandbox Code Playgroud)

是否准备好接受函数来验证参数是否为 URL,以便省略my_url自定义验证函数?

python argparse

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

argparse 接受随机参数

我有一个 Python 应用程序,它argparse使用声明的一组参数来实现:

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--arg1",
        default="dev",
        choices=["real", "test", "dev"],
        help="arg 1"
    )
    parser.add_argument("--arg2", default="0", help="arg 2")
    parser.add_argument(
        "--arg3",
        nargs="+",
        default=["one", "two"],
        choices=["one", "two"],
        help="arg 3",
    )
    parser.add_argument("--arg4", action="store_true", help="arg 4")
    parser.add_argument("--arg5", action="store_true", help="arg 5")
    parser.add_argument("--arg6", action="store_true", help="arg 6")
    parser.add_argument("--arg7", default=None, help="arg 7")

    args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

如果我发送这些声明中未定义的参数,则会出现以下异常:

error: unrecognized arguments: arg8 value
Run Code Online (Sandbox Code Playgroud)

是否可以指示argparse接受未声明的参数?

python argparse

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