Ich habe einige Skripte, die Fabric verwenden, es funktioniert auf mehreren Servern mit ssh. Aber meine Skripte sind wie ein klassischer Python-SkriptFabric fabfil Ausführung Modell ArgumentParser
Hier ist die Form (die Art, wie sie aussehen): my_script.py
mit irgendeiner Funktion und eine Haupt:
from fabric.api import *
from a_custom_class import *
def function1():
#do stuff
def function2():
#do stuff
def main():
parser = ArgumentParser()
parser.add_argument('-n', '--nolaunch', help='start the parsing', action='store_false')
...
execute(function1)
execute(function2)
if __name__ == "__main__":
main()
Also meinen Skript verwendet ich python my_script.py <my_options_for_ArgumentParser>
nur Das funktioniert großartig. Aber ich kann es nicht mit fab -f my_scrip.py main
anrufen.
War ich falsch, das Skript wie ein "normales" Skript zu schreiben? Oder gibt es eine Möglichkeit, es mit fab
ohne erneutes Schreiben zu nennen?
Wenn ich fab -f my_script.py main
es Ausgabe der Hilfe von meinem Skript versuchen (so fühle ich mich Ich bin nah an etwas):
usage fab [-h] [-n] [-g] [-m CARTO]
sind meine Optionen aus dem scipt sind. Aber es ist nicht die gleiche Art und Weise angezeigt, wenn ich versuche, es zu nennen sich die ‚üblichen Weg‘ python my_script.py -h
:
-h, --help show this help message and exit
-n, --nolaunch start the parsing
-g, --html generate the html
-m CARTO, --carto CARTO Do the carto stuff
Aufruf der realen Hauptliste nur die Funktionen von meinem Skript fab -f my_script.py __main__
und ich kann jede Funktion aufrufen mit: fab -f my_script.py my_function
Aber Ich kann nicht herausfinden, wie man den Optionswert für ArgumentParser angibt. Ich habe versucht, Dinge wie: fab -f my_script.py main:<myoptions>
, aber ohne Erfolg.
Das ist schwer zu sagen. Ihr Code ist nicht reproduzierbar. Ich kann nur vermuten, dass Fabric Argumente von der Befehlszeile "isst", bevor Sie eine Chance bekommen, es zu parsen ... – ziky
Tut mir leid, ich konnte den echten Code nicht setzen, es sind ein paar tausend Zeilen. Ja, ich denke, das ist es, Fabric versucht, das Argument so zu lesen, als wäre es für ihn. Ich bleibe bei meinem klassischen Aufruf 'python my_script.py
Das wäre nett. Ich habe versucht, den Source-Code von Fabrics zu betrachten und es benutzt '' OptionParser'' aus '' optparse''-Paket.Ich habe sogar versucht zu überprüfen, ob "OptionParser" Argumente löscht, aber nachdem ich erfolglos war, habe ich mich gelangweilt und bin gescheitert. Aber lassen Sie mich wissen, ob Sie es besser gemacht haben, danke. :) – ziky