我有一个从3个帐户更新信息的代码,我想能够使用命令行上的快捷方式来更新基于我想要的帐户。目前修复有3种不同的python代码。我只想要一个代码,将有一个快捷方式来执行第一个功能,第二个功能,第三个功能,以及所有。我认为我需要使用argparse,但我遇到的问题是试图基于1个帐户运行代码。下面的部分代码。
if __name__ == "__main__":
def _msg(updated):
return "was updated" if updated else "already up-to-date"
Cloud_Updater = Cloud()
updated = Cloud_Updater.update()
print("Cloud {}.\n".format(_msg(updated)))发布于 2020-03-19 23:45:08
argparse可以通过其他“隐藏”选项的默认值来处理此问题。这是从documentation中的示例改编而来的
from argparse import ArgumentParser
# Assumed definitions of HCM, SHC, cloud, and _msg
parser = ArgumentParser()
subparser = p.add_subparsers(dest='name')
subparser.add_parser("hcm").set_defaults(updater=HCM().update)
subparser.add_parser("shc").set_defaults(updater=SHC().update)
subparser.add_parser("cloud").set_defaults(updater=Cloud().update)
args = parser.parse_args()
updated = args.updater()
print("{} {}.".format(args.name, _msg(updated)))然后是像这样的命令
myscript hcm将产生以下结果之一
hcm was updated或
hcm was already up-to-date作为输出。
为了能够运行三者中的任何一个子集,我将去除子解析器,而使用普通选项。就像这样
parser = ArgumentParser()
parser.add_argument("--hcm", action='append_const', const=('hcm', HCM().update), dest='updaters')
parser.add_argument("--shc", action='append_const', const=('shc', SHC().update), dest='updaters')
parser.add_argument("--cloud", action='append_const', const=('cloud', Cloud().update), dest='updaters')
parser.set_defaults(updaters=[])
args = parser.parse_args()
for name, updater in args.updaters:
updated = updater()
print("{} {}.".format(name, _msg(updated)))https://stackoverflow.com/questions/60760404
复制相似问题