2016-07-12 6 views
0

Ist es möglich, ein Python-Skript mit den Parametern in der Befehlszeile wie folgt auszuführen:Python - Run-Funktion mit Parameter in der Befehlszeile

./hello(var=True) 

oder ist es zwingend notwendig, zu tun wie folgt aus:

python -c "from hello import *;hello(var=True)" 

Der erste Weg ist kürzer und einfacher.

+0

[CLI Argumente] (http://www.tutorialspoint.com/python/python_command _line_arguments.htm) –

+0

Die bloße Tatsache, dass Sie 'sys.argv' haben (ziemlich genau die gleiche Idee, die hinter dem' int argc, char * [] argv' in C/C++ steht) sollte Ihnen sagen, dass es möglich ist. Wie Sie es tun, ist jedoch falsch. Überprüfen Sie den Link @ViacheslavKondratiuk schickte Ihnen plus die offizielle Dokumentation. Beachten Sie auch, dass Sie ['getopt()'] (https://docs.python.org/2/library/getopt.html) verwenden können, bei dem es sich um einen CLI-Argumentparser im C-Stil handelt. Es gibt andere Module für dieses auch, aber diese zwei sind omho die übliche Auswahl. – rbaleksandar

+0

Kann man es ohne 'python -c' nennen? Ja. Mit der von Ihnen vorgeschlagenen Syntax? Nr. – jonrsharpe

Antwort

0

Die meisten Shells verwenden Klammern zum Gruppieren oder Sub-Shells. Sie können also keine Befehle wie command(arg) von einer normalen Shell aufrufen ... aber Sie können ein Python-Skript (./hello.py) schreiben, das ein Argument benötigt.

import optparse 
parser = optparse.OptionParser() 
parser.add_option('-f', dest="f", action="store_true", default=False) 
options, remainder = parser.parse_args() 
print ("Flag={}".format(options.f)) 

Und der Anruf mit python hello.py -f

0

./hello(var=True) würde von REPL Shell unmöglich. In einigen Fällen könnte es nützlich sein, die Python-Funktion in Ihrer aktuellen Shell-Sitzung verfügbar zu haben. Hier ein Workaround, um Ihre Python-Funktionen in Ihrer Shell-Umgebung verfügbar zu machen.

# python-tools.sh 

#!/usr/bin/env bash 
set -a # make all available export all variable) 

function hello(){ 
    cd "/app/python/commands" 
    python "test.py" [email protected] 
} 

Inhalt des Python-Skript

#! /usr/bin/env python 
# /app/python/commands/test.py script 

import sys 


def test(*args): 
    print(args) 


if __name__ == '__main__': 

    if sys.argv[1] in globals().keys(): 
     print(sys.argv[1]) 
     globals()[sys.argv[1]](sys.argv[2:]) 
    else: 
     print("%s Not known function" % sys.argv[1]) 

Dann Quelle python-tools.sh

source python-tools.sh 

Nach der hallo Funktion ist

$ hello test arg2 arg2 
test 
(['arg2', 'arg2'],) 
Verwandte Themen