Ярлык для вызова части кода Python на CMD - PullRequest
0 голосов
/ 19 марта 2020

У меня есть код, который обновляет информацию из 3 учетных записей, я хочу иметь возможность использовать ярлык в командной строке для обновления на основе учетной записи, которую я хочу. В настоящее время исправление имеет 3 различных кода python. Я хочу только один код, который будет иметь ярлык для выполнения 1-й функции, 2-й функции, 3-й функции и все. Я думаю, что мне нужно использовать argparse, но где я застрял, пытается запустить код, основанный на 1 из учетных записей. Часть кода ниже.

if __name__ == "__main__":

    def _msg(updated):
        return "was updated" if updated else "already up-to-date"

    HCM_Updater = HCM()
    updated = HCM_Updater.update()
    print("HCM {}.\n".format(_msg(updated)))

    SHC_Updater = SHC()
    updated = SHC_Updater.update()
    print("SHC {}.\n".format(_msg(updated)))

    Cloud_Updater = Cloud()
    updated = Cloud_Updater.update()
    print("Cloud {}.\n".format(_msg(updated)))

1 Ответ

0 голосов
/ 19 марта 2020

argparse может обрабатывать это через значения по умолчанию для «скрытой» опции. Это адаптировано из примера в документации

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