运行 python 带有 argparser 的脚本
running python script with argparser
尝试使用 argparser 运行 我的脚本,但程序没有 运行,除非有正确的参数,但它似乎不起作用;
AttributeError: 'Namespace' object has no attribute 'func'
import sys
import argparse
from develop import Autogit as gt
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
# Create argument command
parser_update = subparsers.add_parser('--sync', help='Sync local and remote repos')
parser_update.set_defaults(func=gt.run)
# Adding arguments
parser.add_argument('--sync', type=str, required=True)
if len(sys.argv) <= 1:
sys.argv.append('--help')
options = parser.parse_args()
options.func() # <--- Causes the error
if __name__ == '__main__':
main()
此外,当给出 --sync arg 时,它会要求另一个参数,然后当我再添加一个参数时。 SYNC,然后returns属性错误。
编辑
正在尝试使程序 运行 成为 develop.Autogit.run
工作..
还必须在我调用的 运行 函数中添加 args 作为参数。
我认为您要完成的是设置默认值,通常这是通过 ArgumentParser.set_defaults()
完成的。您需要使用未初始化的函数来执行此操作。看这个例子:
import sys
import argparse
def f(args):
print("In func")
print(args)
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
# Create argument command
parser_update = subparsers.add_parser("sync", help="Sync local and remote repos")
parser_update.set_defaults(func=f) # <-- notice it's `f` not `f()`
options = parser.parse_args()
options.func(options)
if __name__ == "__main__":
main()
顺便说一句,当您在多个地方定义相同的参数 (--sync
) 时,您的代码片段会遇到更多问题。当使用 subparsers
时,习惯上将这些设置为位置(无前导 --
),以便它们充当子命令。
这是我将与子命令一起使用的典型命令行:
import sys
import argparse
def f(args):
print("In func f")
print(args)
def g(args):
print("In func g")
print(args)
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest="command")
parser_update = subparsers.add_parser("sync", help="Sync local and remote repos")
parser_update.set_defaults(func=f)
parser_delete = subparsers.add_parser("delete", help="Delete sub-command")
parser_delete.set_defaults(func=g)
options = parser.parse_args()
if options.command is not None:
options.func(options)
else:
parser.print_help()
parser.exit()
if __name__ == "__main__":
main()
尝试使用 argparser 运行 我的脚本,但程序没有 运行,除非有正确的参数,但它似乎不起作用;
AttributeError: 'Namespace' object has no attribute 'func'
import sys
import argparse
from develop import Autogit as gt
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
# Create argument command
parser_update = subparsers.add_parser('--sync', help='Sync local and remote repos')
parser_update.set_defaults(func=gt.run)
# Adding arguments
parser.add_argument('--sync', type=str, required=True)
if len(sys.argv) <= 1:
sys.argv.append('--help')
options = parser.parse_args()
options.func() # <--- Causes the error
if __name__ == '__main__':
main()
此外,当给出 --sync arg 时,它会要求另一个参数,然后当我再添加一个参数时。 SYNC,然后returns属性错误。
编辑
正在尝试使程序 运行 成为 develop.Autogit.run
工作..
还必须在我调用的 运行 函数中添加 args 作为参数。
我认为您要完成的是设置默认值,通常这是通过 ArgumentParser.set_defaults()
完成的。您需要使用未初始化的函数来执行此操作。看这个例子:
import sys
import argparse
def f(args):
print("In func")
print(args)
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
# Create argument command
parser_update = subparsers.add_parser("sync", help="Sync local and remote repos")
parser_update.set_defaults(func=f) # <-- notice it's `f` not `f()`
options = parser.parse_args()
options.func(options)
if __name__ == "__main__":
main()
顺便说一句,当您在多个地方定义相同的参数 (--sync
) 时,您的代码片段会遇到更多问题。当使用 subparsers
时,习惯上将这些设置为位置(无前导 --
),以便它们充当子命令。
这是我将与子命令一起使用的典型命令行:
import sys
import argparse
def f(args):
print("In func f")
print(args)
def g(args):
print("In func g")
print(args)
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest="command")
parser_update = subparsers.add_parser("sync", help="Sync local and remote repos")
parser_update.set_defaults(func=f)
parser_delete = subparsers.add_parser("delete", help="Delete sub-command")
parser_delete.set_defaults(func=g)
options = parser.parse_args()
if options.command is not None:
options.func(options)
else:
parser.print_help()
parser.exit()
if __name__ == "__main__":
main()