【问题标题】:Shortcut to calling part of the Python code on CMD在 CMD 上调用部分 Python 代码的快捷方式
【发布时间】:2020-06-30 18:41:08
【问题描述】:

我有一个代码可以更新来自 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)))

【问题讨论】:

    标签: function argparse


    【解决方案1】:

    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)))
    

    【讨论】:

    • 这行得通,除了它只输出 HCM,即使我使用命令“shc”和“cloud”。这是因为它是默认方法吗?我也好心问我怎么能打电话给所有 3 个?会不会是这样的:subparser.add_parser("all").set_defaults(updater=Cloud(),updater=SHC(),updater=HCM().update)
    • 嗯;修复此问题后,我确实会收到 hcmshccloud(视情况而定)。
    • 嗨,现在可以了,谢谢。如何添加一个调用所有 3 个参数的参数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多