2016-04-18 11 views
5

Ich würde gerne wissen, ob es eine Möglichkeit gibt, eine Python-Funktion direkt aus einer Datei auszuführen, indem Sie nur den Dateinamen gefolgt von der Funktion in einer einzigen Zeile angeben.Ausführen einer Python-Methode/-Funktion direkt aus einer Datei

Zum Beispiel kann sagen, ich habe eine Datei 'test.py' mit einer Funktion 'newfunction()'.

---------- test.py -----------

def newfunction(): 
    print 'welcome' 

Kann ich die newfunction() etwas ähnliches wie dies zu tun.

python test.py newfunction 

Ich weiß, wie zu importieren und Funktionen aufzurufen gesehen ähnliche Befehle in django etc etc.Having (python manage.py runserver), fühlte ich, es ist ein Weg direkt wie diese eine Funktion aufzurufen. Lassen Sie mich wissen, wenn etwas Ähnliches möglich ist.

Ich möchte es mit Django verwenden können. Aber eine Antwort, die überall anwendbar ist, wäre großartig.

+0

Ich glaube, Ihre Frage bereits von [http://stackoverflow.com beantwortet werden kann/questions/3987041/python-run-function-from-the-Kommandozeile] (http: // stacko verflow.com/questions/3987041/python-run-function-from-the-command-line) – EngineerCamp

+0

Das möchte ich eigentlich nicht wissen. Ich möchte wissen, ob es in der gleichen Weise wie die 'Python manage.py migrieren' usw. getan werden kann. –

Antwort

4

Versuchen mit globals() und arguments (sys.argv):

#coding:utf-8 

import sys 

def moo(): 
    print 'yewww! printing from "moo" function' 

def foo(): 
    print 'yeeey! printing from "foo" function' 

try: 
    function = sys.argv[1] 
    globals()[function]() 
except IndexError: 
    raise Exception("Please provide function name") 
except KeyError: 
    raise Exception("Function {} hasn't been found".format(function)) 

Ergebnisse:

➜ python calling.py foo 
yeeey! printing from "foo" function 

➜ python calling.py moo 
yewww! printing from "moo" function 

➜ python calling.py something_else 
Traceback (most recent call last): 
    File "calling.py", line 18, in <module> 
    raise Exception("Function {} hasn't been found".format(function)) 
Exception: Function something_else hasn't been found 

➜ python calling.py 
Traceback (most recent call last): 
    File "calling.py", line 16, in <module> 
    raise Exception("Please provide function name") 
Exception: Please provide function name 
+0

Ich wünschte, ich könnte dies als Antwort auch markieren –

+0

@MukundGandlur warum können Sie nicht? Hat es nicht geholfen? –

+0

Es hat mir sehr geholfen !!!! Das funktioniert nicht nur für Django, sondern überall. –

1

Ich glaube, Sie einen Blick darauf werfen sollen:

https://docs.djangoproject.com/en/1.9/howto/custom-management-commands/

All diese Befehle wie migrate, runserver oder dbshell usw. umgesetzt werden wie, wie es in dieser Verbindung beschrieben wurde:

Anwendungen können ihre eigenen Aktionen unter manage.py registrieren. Fügen Sie dazu einfach ein Verzeichnis management/commands zur Anwendung hinzu.

Django registriert einen manage.py-Befehl für jedes Python-Modul in diesem Verzeichnis, dessen Name nicht mit einem Unterstrich beginnt.

Verwandte Themen