Mes réflexions sur le modèle d'application de ligne de commande python2.6

Fonctionnalité

La source

simple.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE,SIG_DFL)

import sys

from logging import getLogger, StreamHandler, Formatter

logger = getLogger(__name__)

def global_loginit(logname=__name__, format="%(message)s", stream=sys.stderr, level=20, datefmt="%Y-%m-%dT%H:%M:%S" ):
    _logger = getLogger(logname)
    _logger.setLevel(level)
    _handle = StreamHandler(stream)
    _handle.setFormatter(Formatter(fmt=format,datefmt=datefmt))
    _logger.addHandler(_handle)
    return _logger

def main(opts):
    logger.info("Python {0}".format(sys.version))
    logger.warning("{0}".format(opts))
    logger.info("{0}".format(opts))
    logger.debug("{0}".format(opts))
    opts["consolelogger"].info("This is it")

def options(opt, add_func, help_tail):
  optadd=add_func(opt)
  optadd('-P', '--prof', default=False, action='store_true', help='get profile' + help_tail )
  optadd('-D', '--Debug', default=False, action='store_true', help='log debug' + help_tail)
  optadd('-Q', '--Quiet', default=False, action='store_true', help='log quiet' + help_tail)
  if type(opt).__name__.startswith("Arg"):
    optadd("args", type=str, nargs='*')
  return opt

def parsed_opts():
  try:
    import argparse
    description= "test"
    epilog = """epilog
    """
    opt = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter, description=description, epilog=epilog)
    add_func = lambda x: x.add_argument
    parsefunc = lambda x: dict(vars(x))
    help_tail=''
  except ImportError as e:
    import optparse
    opt = optparse.OptionParser()
    add_func = lambda x: x.add_option
    parsefunc = lambda x: dict(vars(x[0]).items() + [('args', x[1])])
    help_tail=' [default: %default]'
  return parsefunc( options(opt, add_func, help_tail).parse_args())


if __name__ == '__main__':
    opts = parsed_opts()

    loggercfg = {
      "format": "%(asctime)s.%(msecs).03d %(process)d %(module).4s %(levelname).4s %(lineno)d/%(funcName)s %(message)s",
      "level": 20 if (not opts["Debug"] and not opts["Quiet"]) else 10 if opts["Debug"] else 30
    }
    global_loginit(**loggercfg)
    opts["consolelogger"] = global_loginit(logname=__name__+"console",stream=sys.stdout)

    if opts['prof']:
      import cProfile
      cProfile.run('main(opts)')
      sys.exit(0)
    main(opts)

Recommended Posts

Mes réflexions sur le modèle d'application de ligne de commande python2.6
Modèle pour créer des applications de ligne de commande en Python
Exécutez la commande unix sur python
Diffusion sur LINE en utilisant python
Utilisez Python 3 introduit par l'outil de ligne de commande sur macOS Catalina
Traitement des arguments de ligne de commande (docopt Python)
Module standard Python utilisable en ligne de commande
[Python] Exécutez Flask sur Google App Engine
Décomposer les arguments de commande en une seule ligne en Python
Utilisation de ImageField de Django avec AppEngine / Python
Vous recherchez commandlinefu sur la ligne de commande
Créez une application de ligne de commande en Python pour comprendre les actions setup.py, argparse et GitHub
Mémo de correspondance lorsque la touche de direction ne peut pas être utilisée dans la ligne de commande python
[Python] Comment tester l'analyseur de ligne de commande cliquez sur
Comment recevoir des arguments de ligne de commande en Python
Afficher rapidement le code QR sur la ligne de commande
Gagnez l'application Web Python + Flask avec Jenkins
Tweet (API 1.1) avec Google App Engine pour Python
Développement Arduino en ligne de commande: vim + platformio
Mise en évidence de la syntaxe sur la ligne de commande à l'aide de Pygments
[Introduction à Udemy Python3 + Application] 67. Arguments de ligne de commande
Convertir XLSX en CSV sur la ligne de commande
Exécutez Route53 sur la ligne de commande à l'aide de l'AWS-CLI.
Pensez aux interfaces sélectives sur la ligne de commande
Mon Numpy (Python)
Mon système (Python)
Mon pyproj (Python)
Mes pandas (Python)
Mon str (Python)
Python sur Windows
Mon pyautogui (Python)
twitter avec python3
python sur mac
LINE heroku python
Mon PySide (Python)
Comment passer des arguments lors de l'appel d'un script python depuis Blender sur la ligne de commande
Mon shutil (Python)
Mon matplotlib (Python)
modèle argparse python
Ma commande Linux
Mon urllib (Python)
Mon pyperclip (Python)
Mon sklearn (Python)
[Mon mémo] python
Python sur Windbg
Mon ConfigParser (Python)
Mon Webdriver (Python)
Mon arcpy (Python)
Instructions d'utilisation de l'interface de ligne de commande AWS (Python / awscli) sous Mac OS X
Mon win32gui (Python)
Mon système d'exploitation (Python)
[Python] Modèle Tkinter
Déployer des applications Web Python 3.6 / Django / Postgres sur Azure
série python2 / série 3, code de caractère et instruction d'impression / ligne de commande
Spécifiez une sous-commande comme argument de ligne de commande en Python
Commande Yum pour accéder à MySQL avec Python 3 sous Linux
Déployer l'application Django sur Google App Engine (Python3)
Comment utiliser Django avec Google App Engine / Python
Laissez Python segfo sur une ligne sans utiliser de ctypes
Multiplier PDF par OCR en ligne de commande sous Linux (Ubuntu)
Comparaison des bibliothèques d'analyse de ligne de commande Python (argparse, click, fire)