Ich habe eine Funktion zum Laden des Git-Erweiterungsskripts in Python geschrieben

Besonderheiten von Git

Git hat eine spezielle Funktion: Wenn Sie ein Skript namens "git-xxx" (** mit Ausführungsberechtigung und unter Ihrem PATH **) haben, können Sie es in der Form ** git xxx ** ausführen. (Der berühmte "Git-Flow" verwendet diese Funktion auch, um "Git-Flow" zu nennen.)

Lassen Sie uns diese Funktion in Python neu erfinden.

ich schrieb es

mygit.py


# coding: utf-8

import os
import sys

from subprocess import call


class ExtensionLoader:

    def __init__(self):

        #Da die Umgebungsvariable PATH eine Zeichenfolge ist, die durch einen Doppelpunkt verbunden ist,
        #Konvertieren Sie in ein Array, indem Sie mit einem Doppelpunkt teilen
        self.PATH = os.environ["PATH"].split(":")

    def load(self, ext, args):

        # ext: 'mygit init' -> 'init'
        ext_absname = "mygit-{}".format(ext)
        found_flag = None
        extension = None

        for directory in self.PATH:
            # 'mygit-init'Ist im Verzeichnis
            if ext_absname in os.listdir(directory):
                found_flag = True
                extension = os.path.join(directory, ext_absname)

        if found_flag:
            # 'mygit-init'Laufen Sie, wenn Sie finden
            cmd = [extension]
            cmd += args #Übergabe von Argumenten an das hier auszuführende Erweiterungsskript
            return call(cmd)

        else:
            raise IOError("Extension does not found: {}".format(ext))

if __name__ == "__main__":

    if len(sys.argv) == 1:
        print "usage: mygit {command}"
        sys.exit(1)

    extloader = ExtensionLoader()

    # argv: ["mygit" "command", "arg1", "arg2", "arg3"]
    command = sys.argv[1]
    arguments = sys.argv[2:]
    exit_status = extloader.load(command, arguments)

    sys.exit(exit_status)

Es war überraschend einfach.

Das Problem ist, dass es nicht mit ** argparse ** verwendet werden kann. argparse kann Unterbefehle analysieren, aber wenn ein nicht registrierter Befehl eingegeben wird, wird ein Fehler ausgegeben und es ist nicht möglich, den Erweiterungsskriptbefehl im Voraus zu registrieren ...

Recommended Posts

Ich habe eine Funktion zum Laden des Git-Erweiterungsskripts in Python geschrieben
Ich habe ein Skript geschrieben, um Webseiten-Links in Python zu extrahieren
Ich habe ein Skript geschrieben, um eine beliebte Seite in Japan zu bekommen
Ich möchte mit Python ein Fenster erstellen
Ich habe eine Klasse in Python3 und Java geschrieben
Geschrieben "Einführung in die Effektüberprüfung" in Python
Ich habe ein Skript geschrieben, um ein WordPress-Plug-In hochzuladen
Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln
[Python] Ich habe gewaltsam eine kurze Funktion zur Erzeugung von Parlin-Geräuschen in Numpy geschrieben.
Ich habe ein Skript in Python erstellt, um MDD-Dateien in das Scrapbox-Format zu konvertieren
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Ich habe Python auf Japanisch geschrieben
Erstellen Sie eine Funktion in Python
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich habe ein Skript erstellt, um ein Snippet in README.md einzufügen
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ein Memorandum zum Ausführen eines Python-Skripts in einer Bat-Datei
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit einem Roboter in Python arbeiten.
Ich war nüchtern süchtig danach, awscli von einem in crontab registrierten Python 2.7-Skript aus aufzurufen
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Ich habe ein Skript zur automatischen Erstellung eines leeren Verzeichnisses in Python geschrieben
So geben Sie char * in einer Rückruffunktion mit ctypes in Python zurück
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
Ich habe ein Skript geschrieben, das das Bild in zwei Teile teilt
Ich habe Fizz Buzz in Python geschrieben
Ich habe die Warteschlange in Python geschrieben
Ich habe den Stack in Python geschrieben
Ich habe ein Skript in Python erstellt, um eine Textdatei für JSON zu konvertieren (für das vscode-Benutzer-Snippet).
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe ein Skript geschrieben, um mit AWS Lambda + Python 2.7 schnell eine Entwicklungsumgebung für Twitter Bot zu erstellen
Übergeben von Argumenten an Python-Skripte in SPSS Modeler Batch
Ich habe ein Skript geschrieben, mit dem Sie mit hoher Geschwindigkeit mit AtCoder beginnen können!
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
Ich habe versucht, ein missverstandenes Gefangenendilemma in Python zu implementieren
Ich habe ein Skript geschrieben, um goodnotes5 und Anki bei der Zusammenarbeit zu unterstützen
Ich habe versucht, Permutation in Python zu implementieren
Ich möchte in der Einschlussnotation drucken
Ich habe ein Pay-Management-Programm in Python erstellt!
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Pin aktuelles Verzeichnis an Skriptverzeichnis in Python
Beispielskript zum Überfüllen von Signalen in Python
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich möchte eine Python-Umgebung erstellen
Ein einfaches IDAPython-Skript zum Benennen einer Funktion
Führen Sie den Python-Interpreter im Skript aus
Wie bekomme ich Stacktrace in Python?
Ich habe versucht, ADALINE in Python zu implementieren
Ich wollte ABC159 mit Python lösen
Ich habe versucht, PPO in Python zu implementieren
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
Ich habe ein Passwort-Tool in Python erstellt.