2012-02-24 02:38

PyQt Quickie: parsear línea de comandos

Si estás escribiendo una aplicación con PyQt y querés soportar opciones en la línea de comandos, seguro hacés algo así:

opt_parser = OptionParser()
opt_parser.add_option("-q", dest="quickly", action="store_true",
    help="Do it quickly (default=False)")
(options, args) = opt_parser.parse_args(sys.argv)
app = QApplication(sys.argv)
:
:
:

O tal vez incluso QApplication([]). Bueno, eso está mal. Y está mal en casi todos los tutoriales, también. ¿Porqué? Porque Qt (y por lo tanto PyQt) soporta un montón de opciones útiles. Al hacerlo como en ese primer listado, si le pasás "-style=oxygen" o lo que sea, va a pasar alguna de estas cosas:

  1. OptParser te va a decir que es una opción inválida y abortar
  2. Vas a ignorar la opción y no vas a hacer nada útil con ella
  3. Vas a tener tu propia opción -style y vas a hacer dos cosas

Ninguna de esas opciones es la idea. La manera correcta de hacerlo es ésta:

opt_parser = OptionParser()
opt_parser.add_option("-q", dest="quickly", action="store_true",
    help="Do it quickly (default=False)")
app = QApplication(sys.argv)
(options, args) = opt_parser.parse_args(app.arguments())
:
:
:

De esta manera, le das a PyQt la oportunidad de procesar las opciones que reconoce y después, vos manejás el resto, porque a app.arguments() ya le sacaron todas las opciones de Qt.

El lado malo es que --help va a ser mas lento, porque tiene que instanciar QApplication al divino botón, y vas a tener opciones no documentadas. Soluciones para ambos problemas se dejan como ejercicio.

Comentarios

Comments powered by Disqus

Contents © 2000-2019 Roberto Alsina