7

I would like to know if there is a way to directly run a python function directly from a file by just mentioning the filename followed by the function in a single line.

For example, lets say I have a file 'test.py' with a function 'newfunction()'.

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

def newfunction():
     print 'welcome'

Can I run the newfunction() doing something similar to this.

  python test.py newfunction

I know how to import and to call functions etc.Having seen similar commands in django etc (python manage.py runserver), I felt there is a way to directly call a function like this. Let me know if something similar is possible.

I want to be able to use it with django. But an answer that is applicable everywhere would be great.

Mukund Gandlur
  • 861
  • 1
  • 12
  • 35
  • I think your question may already be answered by [http://stackoverflow.com/questions/3987041/python-run-function-from-the-command-line](http://stackoverflow.com/questions/3987041/python-run-function-from-the-command-line) – EngineerCamp Apr 18 '16 at 05:28
  • That is not actually what I want to know. I want to know if it can be done in a similar way to the 'python manage.py migrate' etc. – Mukund Gandlur Apr 18 '16 at 05:30

2 Answers2

7

Try with globals() and 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))

Results:

➜ 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
Andrés Pérez-Albela H.
  • 4,003
  • 1
  • 18
  • 29
1

I think you should take a look at:

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

All those commands like migrate, runserver or dbshell etc. are implemented like how it was described in that link:

Applications can register their own actions with manage.py. To do this, just add a management/commands directory to the application.

Django will register a manage.py command for each Python module in that directory whose name doesn’t begin with an underscore.

Community
  • 1
  • 1
Ozgur Vatansever
  • 49,246
  • 17
  • 84
  • 119