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.

2

2 Answers 2

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 
Sign up to request clarification or add additional context in comments.

2 Comments

@MukundGandlur why can't you? Didn't it helped?
It's great to know it helps. I'm glad it's useful.
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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.