2016-03-20 10 views
1

Ich versuche, grundlegende Befehlszeilenfunktionen zu implementieren.Übergeben Sie das Ergebnis von click.command an eine andere Funktion.

Also ich muss in der Lage sein, Datei als Argument übergeben, lesen Sie es und übergeben Ergebnis weiter.

Aber aus irgendeinem Grund funktioniert es nicht wie erwartet.

import click 


@click.command() 
@click.argument('arg', nargs=1, type=click.File('r')) 
def touch(arg): 
    return len(arg.readlines()) 


def fill(): 
    print touch() 


if __name__ == '__main__': 
    fill() 

Es gibt keine Ausgabe. Aber scheint touch() wird ausgeführt, da in Fall, wenn ich Print-Anweisung in touch() hinzufügen kann ich einige Sachen in der Ausgabe sehen.

+0

Wie kann man 'touch()' ohne Argumente, wenn in Ihnen Definition ausführen ist einer erforderlich? – Ilja

+0

@Ilja 'Klick' Griffe, die unter der Haube –

Antwort

1

Leider macht die Verwendung von Klick es so, dass Ihre Funktion nie einen Wert zurückgibt. Sie können click.echo verwenden, um die Werte an das Front-End zu drucken, aber Sie können keine Werte zurückgeben, wenn die Ausführung der Funktion beendet wird. Mit anderen Worten, es verhält sich nicht länger als eine Funktion, wenn Sie es mit click.command umschließen, sondern wird stattdessen zu einem Befehlszeilenprogramm.

Sie können alternativ optparse verwenden, um das zu erreichen, was Sie erreichen möchten.

Ressourcen - https://docs.python.org/2/library/optparse.html

Edit: - fand ich eine ähnliche Frage hier, können Sie auch diese als Referenz verwenden können - es How do I return a value when @click.option is used to pass a command line argument to a function?