简体   繁体   中英

Running a python method/function directly from a file

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.

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM