Ich schreibe eine neue PyQt-App. Ich versuche alles, was mit dem Programm zu tun hat, zu tun und benutze möglichst viele der PyQt-APIs, um mein Wissen über PyQt und Qt im Allgemeinen zu verbessern.
Die Frage, die ich habe, ist, gibt es eine API in PyQt / Qt, um Kommandozeilenargument elegant zu parsen?
Meine bisherigen Forschungen sind aufgetaucht:
Wie gehen PyQt-Anwendungen normalerweise damit um? oder ist opt_parser / argparse der weg zu gehen?
Das ist bei weitem keine schöne Lösung ...
%Vor% Die beste Lösung ist hier die Verwendung der argparse
-Methode ( Dokumentation von parse_known_args()
) ), um die Nicht-Qt-Befehlszeilenoptionen zuerst zu verarbeiten. Es ist nicht mehr nötig, ArgumentParser
zu konfigurieren - es ändert nur die aufgerufene Methode und gibt Ihnen ein Tupel anstelle eines einzelnen Objekts in der Rückgabe. Das gibt dir das Beste aus beiden Welten.
Ein vereinfachtes Beispiel, das nur einige der Argumente von Qt 4.8 und einige andere auffängt, aber die allgemeine Idee gibt.
%Vor%Angenommen, Sie sollten das folgendermaßen ausführen:
%Vor% Dann hätte parsed_args
die übliche Namespace
mit holy_hand_grenade
auf 3
und --swallow
auf 'unladen'
, während unparsed_args
eine einfache Liste hätte: ['-dograb', '-style,' 'cde']
. Dies wiederum kann normal an die QApplication
mit der Aufnahme des Programmnamens von sys.argv[0]
weitergegeben werden (danke an marcin für darauf hinweisen ) . Wir verwenden sys.argv[:1]
, um ein Array für die Verkettung mit unparsed_args
zu erhalten; Du könntest auch [sys.argv[0]]
Damit können Sie unter anderem Ihre Anwendung so einrichten, dass sie angibt, ob die Qt UI gestartet werden soll, ob sie als Befehlszeile ausgeführt werden soll, ob Unit-Tests ausgeführt werden sollen, wenn Sie dies wünschen. Es ist besser, zuerst die Nicht-Qt-Argumente (oder irgendetwas anderes) zu behandeln, da %%_de% nicht von der verwendeten Konfiguration abhängig ist, sondern umgekehrt.
Sie sollten docopt wirklich ausprobieren. Es benötigt keine Argumentdefinitionen. Sie haben "Verwendung:" Zeichenfolge und ungeparste Argumente als Eingabe, übergeben Sie sie in die Funktion "optopt ()", und Sie haben Argumente als Ausgabe analysiert.
Tags und Links python qt pyside command-line-arguments pyqt