背景
我有一个脚本,我用它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不是?
我正在使用 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”
type=argparse.FileType()我可以通过将 argparse 更改为某些 gzip 类型来直接使用 argparse 打开 gzip 文件吗?它不在文档中,所以我不确定 argparse 是否支持压缩文件类型......
我有一个基于 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
需要帮助理解 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) 我正在使用 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) 我有一个无法修改的基类(代码可能有其他错误,但请忽略这些)
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) 假设我有一个可以接受 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 参数?
我正在构建一个待办事项列表 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) 我已经通读了一堆已经回答的问题,但我没有看到这一点——至少我没有意识到。
我正在使用 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) argparse ×10
python ×9
python-3.x ×2
arguments ×1
del ×1
function ×1
gzip ×1
python-2.7 ×1
tkinter ×1