2016-04-18 13 views
5

Vorrei sapere se esiste un modo per eseguire direttamente una funzione python direttamente da un file menzionando semplicemente il nome file seguito dalla funzione in una singola riga.Esecuzione di un metodo/funzione python direttamente da un file

Per esempio, Diciamo che ho un file 'test.py' con una funzione di 'newfunction()'.

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

def newfunction(): 
    print 'welcome' 

Posso eseguire il newfunction() fare qualcosa di simile a questo.

python test.py newfunction 

so come importare e per richiamare le funzioni etc.Having comandi simili visti in Django etc (python manage.py runserver), ho sentito che c'è un modo per chiamare direttamente una funzione come questa. Fammi sapere se qualcosa di simile è possibile.

Voglio poterlo usare con django. Ma una risposta applicabile ovunque sarebbe grande.

+0

Penso che la tua domanda potrebbe essere già risposto da [http://stackoverflow.com/domande/3987041/python-run-funzione-from-the-riga di comando] (http: // stacko verflow.com/questions/3987041/python-run-function-from-the-command-line) – EngineerCamp

+0

In realtà non è quello che voglio sapere. Voglio sapere se può essere fatto in modo simile a 'python manage.py migrate' ecc. –

risposta

4

prova con globals() e 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)) 

Risultati:

➜ 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

Vorrei poter contrassegnare questo come risposta –

+0

@MukundGandlur perché non puoi? Non è stato d'aiuto? –

+0

Ha aiutato molto !!!! Questo non funziona solo per Django ma ovunque –

1

penso che si dovrebbe dare un'occhiata a:

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

Tutti questi comandi come migrate, runserver o dbshell ecc sono implementate come come è stato descritto in questo link:

Le applicazioni possono registrare le proprie azioni con manage.py. Per fare questo, basta aggiungere una directory di gestione/comandi all'applicazione.

Django registrerà un comando manage.py per ciascun modulo Python in quella directory il cui nome non inizia con un trattino basso.

Problemi correlati