import argparse
parser = argparse.ArgumentParser(prog='tool')
args = [('-u', '--upf', 'ref. upf', dict(required='True')),
('-s', '--skew', 'ref. skew', {}),
('-m', '--model', 'ref. model', {})]
for args1, args2, desc, options in args:
parser.add_argument(args1, args2, help=desc, **options)
parser.print_help()
Run Code Online (Sandbox Code Playgroud)
输出:
usage: capcheck [-h] -u UPF [-s SKEW] [-m MODEL]
optional arguments:
-h, --help show this help message and exit
-u UPF, --upf UPF ref. upf
-s SKEW, --skew SKEW ref. skew
-m MODEL, --model MODEL
ref. model
Run Code Online (Sandbox Code Playgroud)
我如何打印参考.-m MODEL, --model MODEL当我使用-h …
我想argparse在Python 2.7 上使用我的脚本参数之一要求介于0.0和1.0之间.是否argparse.add_argument()支持呢?
我有一个使用默认名称和密码的程序.我正在使用argparse来允许用户指定命令行选项,我想让用户为程序提供不同的名称和密码以供使用.所以我有以下内容:
parser.add_argument(
'-n',
'--name',
help='the login name that you wish the program to use'
)
parser.add_argument(
'-p',
'--password',
help='the password to log in with.'
)
Run Code Online (Sandbox Code Playgroud)
但是仅指定名称或仅指定密码没有任何意义,但指定两者都没有意义.我注意到argparse确实能够指定两个参数是互斥的.但我所拥有的是必须同时出现的两个论点.我该如何得到这种行为?(我发现文档中提到了"论证组",但它们似乎没有解决我的问题http://docs.python.org/2/library/argparse.html#argument-groups)
我想对myprog工作进行这些调用,而不是其他人.
$ python3 myprog.py -i infile -o outfile
$ python3 myprog.py -o outfile
$ python3 myprog.py -o
$ python3 myprog.py
Run Code Online (Sandbox Code Playgroud)
特别是我想指定infile而不是outfile是非法的.
在第三种情况下,假定outfile的默认名称为"out.json".在第二种,第三种和第四种情况下,假定输入文件的默认名称为"file.n.json",其中n是整数版本号.在第四种情况下,输出文件将是"file.n + 1.json",其中n + 1是比输入文件上的版本号大1的版本号.我的代码的相关部分是:
import argparse
parser = argparse.ArgumentParser(description="first python version")
parser.add_argument('-i', '--infile', nargs=1, type=argparse.FileType('r'), help='input file, in JSON format')
parser.add_argument('-o', '--outfile', nargs='?', type=argparse.FileType('w'), default='out.json', help='output file, in JSON format')
args = parser.parse_args()
print("Here's what we saw on the command line: ")
print("args.infile",args.infile)
print("args.outfile",args.outfile)
if args.infile and not args.outfile:
parser.error("dont specify an infile without specifying an outfile")
elif …Run Code Online (Sandbox Code Playgroud) 我argparse用来解析命令行参数.
为了帮助调试,我想print在调用Python脚本的参数中添加一行.有没有一种简单的方法可以做到这一点argparse?
我编写了以下示例代码来演示我的问题.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--version', action='version',
version='%(prog)s 1.0')
parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
这会产生以下帮助信息.
$ python foo.py --help
usage: foo.py [-h] [-v]
optional arguments:
-h, --help show this help message and exit
-v, --version show program's version number and exit
Run Code Online (Sandbox Code Playgroud)
我想自定义此帮助输出,以便将所有短语和句子大写,并将句点放在句子之后.换句话说,我希望像这样生成帮助消息.
$ python foo.py --help
Usage: foo.py [-h] [-v]
Optional arguments:
-h, --help Show this help message and exit.
-v, --version Show program's version number and exit.
Run Code Online (Sandbox Code Playgroud)
这是我可以使用argparse API控制的东西.如果是这样,怎么样?能否请您提供一个小例子来说明如何做到这一点?
我刚刚注意到argparse中的一个行为使我感到困惑(我猜我之前从未使用它作为一个愚蠢的文件列表):
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('multi', action='append', nargs='+')
print(parser.parse_args())
Run Code Online (Sandbox Code Playgroud)
这给了我输出:
~$ ./testargs.py foo bar baz
Namespace(multi=[['foo', 'bar', 'baz']])
~$
Run Code Online (Sandbox Code Playgroud)
我希望multi是['foo', 'bar', 'baz'],不是一个列表中列表.按原样,我必须args.multi[0]在处理之前抓住,这不是什么大问题,但感觉就像一个丑陋的疣,我想知道为什么它在那里.
我是在做傻事add_argument,还是这只是一个不可避免的怪癖?
我试图运行一个Python程序,但得到错误
ImportError: No module named argparse
Run Code Online (Sandbox Code Playgroud)
我在StackOverflow上找到了问题"在cli中使用argparse Python模块"并尝试了第一条注释,即运行命令
python -c "import argparse; print argparse"
Run Code Online (Sandbox Code Playgroud)
结果导致了
<module 'argparse' from '/usr/lib/python2.7/argparse.pyc'>
Run Code Online (Sandbox Code Playgroud)
对我来说,似乎机器上安装了Python 2.7(我不是管理员),argparse模块也存在.所以我想知道为什么找不到这个模块.在另一台机器上,脚本按原样运行.在上面提到的帖子中,有评论可能sys.path被打破.我不知道这意味着什么,或者我如何改变它的价值.有任何想法吗?
我正在编写一个使用argparse的程序,用于解析我需要的一些参数.
现在我有这个:
parser.add_argument('--rename', type=str, nargs=2, help='some help')
当我运行这个脚本时,我看到了这个:
optional arguments:
-h, --help show this help message and exit
--rename RENAME RENAME
some help
Run Code Online (Sandbox Code Playgroud)
如何以帮助"页面"向我显示的方式更改我的代码:
--rename OLDFILE NEWFILE
Run Code Online (Sandbox Code Playgroud)
那么我可以用这种方式使用OLDFILE和NEWFILE值吗?
args.rename.oldfile
args.rename.newfile
Run Code Online (Sandbox Code Playgroud) 试图在argparse中创建一个参数,在这里可以输入几个可以读取的文件名. 在这个例子中,我只是试图打印每个文件对象,以确保它正常工作,但我收到错误:
error: unrecognized arguments: f2.txt f3.txt
Run Code Online (Sandbox Code Playgroud)
.我怎样才能让它识别出所有这些?
我的命令在终端运行程序并读取多个文件
python program.py f1.txt f2.txt f3.txt
Run Code Online (Sandbox Code Playgroud)
Python脚本
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('file', nargs='?', type=file)
args = parser.parse_args()
for f in args.file:
print f
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我用过nargs='?'b/c我希望它是可以使用的任意数量的文件.如果我add_argument改为:
parser.add_argument('file', nargs=3)
Run Code Online (Sandbox Code Playgroud)
然后我可以打印它们作为字符串,但我不能让它与'?'一起工作
argparse ×10
python ×10
arguments ×1
file ×1
install ×1
parsing ×1
pip ×1
python-2.7 ×1
python-3.x ×1
range ×1