Elegantes Befehlszeilenargument, das nach PyQt sucht

8

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:

  • ein Beispiel dafür, wie man mit dem Modul opt_parser von Python spielen kann, außer es tut es nicht Behandle QApplications eingebautes Arg-Parsing nicht.
  • PyKDEs KCmdLineArgs (was eine unerwünschte KDE-Abhängigkeit einführt)
  • es sieht so aus, als würde KCmdLineArgs für Qt5.1 als QCommandLineParser in den Upstream portiert werden, was cool ist, aber ich würde es jetzt gerne benutzen, nicht in 18 Monaten.

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%     
troy.unrau 29.07.2012, 21:13
quelle

3 Antworten

3

Verwenden Sie argparse , wenn Sie Python 2.7 ( optparse wenn & lt; 2.7 ), das Paket muss nicht spezifisch für PyQt sein, damit Sie Befehlszeilenoptionen handhaben können.

>     
aayoubi 29.07.2012, 21:51
quelle
5

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

machen

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.

    
Chris Krycho 16.01.2014 15:56
quelle
0

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.

    
Alexander Shishenko 05.01.2016 20:49
quelle