标签: argparse

用python argparse递归

我正在使用argparse编写一个递归程序.唯一需要的参数是要处理的文件(或多个文件).当我递归调用它时,我不需要文件名(因为我将调用一个新目录),但我需要选项.问题是argparse允许python programname.py -options arg FILENAME FILENAMEpython programname.py FILENAME FILENAME -options arg.我可以苦心寻找一个' - '并用大量的if语句来解决它,但我觉得应该有一个更好的方法.

不确定它是否重要,但这是我的argparse声明:

 parser = argparse.ArgumentParser(description='Personal upload script. (defaults to ' + user + '@' + server + directory + ')')
 parser.add_argument('files', nargs="+", help='file(s) to upload')
 parser.add_argument('-s', metavar='example.com', default=server, help='server to upload to')
 parser.add_argument('-u', metavar='username', default=user, help='ftp username')
 parser.add_argument('-p', metavar='password', default=password, help='ftp password')
 parser.add_argument('-d', metavar='example/', default=directory, help='directory to place file in')
 parser.add_argument('-n', metavar='myfile.txt', help='name to save file as')
 parser.add_argument('-c', metavar='###', help='chmod upload')
 parser.add_argument('-l', action='store_true', help='print …
Run Code Online (Sandbox Code Playgroud)

python recursion argparse

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

argparse连接cli选项

刚刚开始学习python并将命令行选项传递给python脚本.我正在尝试连接两个或多个参数并将其传递给字符串变量,

例如,

myscript.py http://www.domain.com 1234
Run Code Online (Sandbox Code Playgroud)

将它放入一个名为的字符串变量中url,该变量的值应为" http://www.domain.com:1234 "

我不太确定如何存档.使用raw_input和一些字符串操作是非常直接的,但我想知道是否也可以这样做argparse.

python argparse

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

Python命令行脚本.两种使用场景.如何实现参数解析?

我有一个python命令行脚本,可以以两种不同的方式使用.

第一种情况是这样的:

script.py -max MAX -min MIN -delta DELTA
Run Code Online (Sandbox Code Playgroud)

where -max-min是必需的参数,-delta是可选的.

第二种情况是:

script.py some_file.txt -f
Run Code Online (Sandbox Code Playgroud)

其中some_file.txt是必需的位置参数,-f是可选的.

我如何使用任何Python命令行参数解析器(argparse,optparse,getopt等)实现它?

更新:脚本只做一件事 - 刮擦网站.但它的运作时间很长.在第一种情况下,我们运行新的scrape会话,而在第二次加载之前保存的会话并继续报废.

python parsing args command-line-arguments argparse

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

为什么Python的argparse使用SystemExit的错误代码为2?

当我给Python的argparse输入它不喜欢时,它会引发一个代码为2的SystemExit,这似乎意味着"没有这样的文件或目录".为什么要使用此错误代码?

import argparse
import errno

parser = argparse.ArgumentParser()
parser.add_argument('arg')

try:
    parser.parse_args([])
except SystemExit as se:
    print("Got error code {} which is {} in errno"
        .format(se.code, errno.errorcode[se.code]))
Run Code Online (Sandbox Code Playgroud)

产生这个输出:

usage: se.py [-h] arg
se.py: error: too few arguments
Got error code 2 which is ENOENT in errno
Run Code Online (Sandbox Code Playgroud)

python errno argparse

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

有argparse收集,但没有响应,标志

我有一个脚本,它接受一些参数,使用其中一些参数来选择要运行的脚本,并将其余参数传递给该脚本.所以它看起来像这样:

parser = ArgumentParser()
parser.add_argument('script', choices['a', 'b'])
parser.add_argument('rest_args', nargs='*')
args = parser.parse_args()
if args.script == 'a':
    subprocess.call('python a.py %s' % ' '.join(args.rest_args))
else:
    subprocess.call('python b.py %s' % ' '.join(args.rest_args))
Run Code Online (Sandbox Code Playgroud)

这工作正常,除非我想传入以...开头的参数-.例如,如果我打电话python my_script.py a --foo,我会得到一个错误unrecognized arguments,当我真的想让它运行时python a.py --foo(即只是传递--foo给子进程).

有没有办法解决这个问题argparse

python argparse

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

如何在Python的argparse中对同一组参数调用两次parse_args()?

简化的测试用例:我有一个带有两个参数的脚本.第一个是整数列表.第二个是一个整数,必须包含在第一个参数的整数集中.

例如:

$ python argtest.py --valid_nums 1 2 3 --num 2
Run Code Online (Sandbox Code Playgroud)

应该工作,但是:

$ python argtest.py --valid_nums 1 2 3 --num 4
Run Code Online (Sandbox Code Playgroud)

不应该工作,因为num不是in valid_nums.但是,我遇到了一些困难(阅读:我怀疑它比它的价值更麻烦,但我真的希望它能够工作)实现这个功能.

实施尝试:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--valid_nums',
                    type=int,
                    nargs='+')

args = parser.parse_args()
print "Numbers: ", args.valid_nums


parser.add_argument('--num',
                    type=int,
                    choices=args.valid_nums)

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

实际产量:

$ python argtesttest.py --valid_nums 1 2 3 --num 2
usage: argtesttest.py [-h] [--valid_nums VALID_NUMS [VALID_NUMS ...]]
argtesttest.py: error: unrecognized arguments: --num 2
Run Code Online (Sandbox Code Playgroud)

期望的输出:

$ python argtesttest.py --valid_nums 1 …
Run Code Online (Sandbox Code Playgroud)

python argparse

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

如何在Python的argparse中使用命令行参数-h?

我有以下python:

import argparse
parser = argparse.ArgumentParser()
requiredNamed = parser.add_argument_group('required named arguments')
requiredNamed.add_argument('-h', '--host_name', required=True, help="Host IP address")
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误:

argparse.ArgumentError: argument -h/--help: conflicting option string(s): -h
Run Code Online (Sandbox Code Playgroud)

每一个字母的作品除了罚款-h.它似乎是为--help保留的.我怎样才能使它不-h被自动保留?

python argparse

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

有什么方法可以指示argparse(Python 2.7)从sys.argv中删除找到的参数?

在开发过程中,我正处于过渡阶段,即将变成一个相当庞大的Python 2.7项目。现在,我将所有unittest班级集中在各自的模块中tests.py,该模块大约有3300行。这太疯狂了,无法导航,到处都是坏习惯,等等。

因此,我当前的任务是将其重构为子模块。作为此重构的一部分,我想简化从命令行运行一部分测试的过程。例如:

$ python tests.py --all                         <--- runs *all* tests
$ python tests.py --utils_base                  <--- runs all tests on .utils
$ python tests.py --utils_vector                <--- runs all tests on .utils.vector
$ python tests.py --utils_base --utils_vector   <--- runs all tests on .utils.vector & .utils
Run Code Online (Sandbox Code Playgroud)

因此,我开始使用进行设置argparse。我进行了基本ArgumentParser设置,没有问题,并且帮助消息显示正常:

$ python tests.py -h
usage: tests.py [-h] [--all] [--utils_base]

optional arguments:
  -h, --help    show this help message and exit

Global Options:
  --all         Run all tests (overrides any …
Run Code Online (Sandbox Code Playgroud)

python python-2.7 argparse

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

更好的命令行解析python

使用argparse,我创建了一个小脚本,其中包含我的分析程序的命令行解析器,它是自制python包的一部分.它工作得很好,但我真的不喜欢如何控制它.

这是代码在脚本本身中的样子

def myAnalysis():

    parser = argparse.ArgumentParser(description='''
        lala''')
    parser.add_argument('-d', '--data',help='')
    parser.add_argument('-e', '--option_1', help='', default=False, required=False)
    parser.add_argument('-f', '--option_2', help='', default=False, required=False)


    # combine parsed arguments
    args = parser.parse_args()code here
Run Code Online (Sandbox Code Playgroud)

除此之外,分析包的安装文件中还有更多内容

entry_points={
          'console_scripts': [
              'py_analysis = edit.__main__:myAnalysis'
          ]
Run Code Online (Sandbox Code Playgroud)

正如我所说,这没有任何问题.分析我必须使用的一些数据

py_analysis --data path_to_data_file
Run Code Online (Sandbox Code Playgroud)

有时候,我需要一些选择.为此,它可能看起来很糟糕

py_analysis --data path_to_data_file --option_1 True --option_2 True
Run Code Online (Sandbox Code Playgroud)

就我个人而言,这有点难看.我更喜欢类似的东西

py_analysis path_to_data_file --option_1 --option_2
Run Code Online (Sandbox Code Playgroud)

我很确定这是可能的.我只是不知道如何

python argparse

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

具有功能的argparse子解析器

您好,我从开始argparse。我的目标是使用接受参数并重定向到相应命令功能的主要命令构建CLI。这是我到目前为止所做的:

def main():

    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers()

    command1_parser = subparsers.add_parser('command1')
    command1_parser.set_defaults(func=command1)
    command1_parser.add_argument('--name', dest='name')

    command2_parser = subparsers.add_parser('command2')
    command2_parser.set_defaults(func=command2)
    command2_parser.add_argument('--frequency', dest='frequency')

    args = parser.parse_args()

def command1():

    # do something with args.name

def command2():

    # do something with args.frequency

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

当我做:

entrypoint command1 --name Hello
Run Code Online (Sandbox Code Playgroud)

要么:

entrypoint command2 --frequency 10
Run Code Online (Sandbox Code Playgroud)

无法捕获相应的args。我做错了什么?谢谢!

python argparse

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