У меня есть некоторый код для передачи переменной в скрипт из командной строки. Я могу передать любое значение в function
для аргумента var
. Проблема в том, что когда я помещаю function
в класс, переменная не читается в function
. Сценарий:
import sys, os
def function(var):
print var
class function_call(object):
def __init__(self, sysArgs):
try:
self.function = None
self.args = []
self.modulePath = sysArgs[0]
self.moduleDir, tail = os.path.split(self.modulePath)
self.moduleName, ext = os.path.splitext(tail)
__import__(self.moduleName)
self.module = sys.modules[self.moduleName]
if len(sysArgs) > 1:
self.functionName = sysArgs[1]
self.function = self.module.__dict__[self.functionName]
self.args = sysArgs[2:]
except Exception, e:
sys.stderr.write("%s %s\n" % ("PythonCall#__init__", e))
def execute(self):
try:
if self.function:
self.function(*self.args)
except Exception, e:
sys.stderr.write("%s %s\n" % ("PythonCall#execute", e))
if __name__=="__main__":
function_call(sys.argv).execute()
Это работает, введя ./function <function> <arg1 arg2 ....>
. Проблема в том, что я хочу выбрать нужную функцию в классе, а не просто в функции. Код, который я пробовал, такой же, за исключением того, что function(var):
находится в классе. Я надеялся на некоторые идеи о том, как изменить мой function_call
класс, чтобы принять это.
Если я хочу передать значение Hello
, я запускаю скрипт следующим образом - python function_call.py function Hello
. Затем печатается переменная var
как Hello
.
Вводя переменную в командные строки, я могу использовать эту переменную во всем коде. Если бы скрипт был набором функций, я мог бы просто выбрать функцию, используя этот код, но я бы хотел выбрать функции внутри определенного класса. Вместо python function.py function hello
я мог бы также войти в класс, например. python function.py A function hello
.
Также я столкнулся с проблемой сохранения значения для использования вне функции. Если бы кто-то мог решить это, я был бы очень признателен.
_________________________________________________________________________________
Измененный код. Это код, который работает для меня сейчас.
class A:
def __init__(self):
self.project = sys.argv[2]
def run(self, *sysArgs):
pass
def funct(self):
print self.project
class function_call(object):
def __init__(self, sysArgs):
try:
self.function = None
self.args = []
self.modulePath = sysArgs[0]
self.moduleDir, tail = os.path.split(self.modulePath)
self.moduleName, ext = os.path.splitext(tail)
__import__(self.moduleName)
self.module = sys.modules[self.moduleName]
if len(sysArgs) > 1:
self.functionName = sysArgs[1]
self.function = getattr(A(), sysArgs[1])(*sysArgs[2:])
self.args = sysArgs[2:]
except Exception, e:
sys.stderr.write("%s %s\n" % ("PythonCall#__init__", e))
def execute(self):
try:
if self.function:
self.function(*self.args)
except Exception, e:
sys.stderr.write("%s %s\n" % ("PythonCall#execute", e))
if __name__=="__main__":
function_call(sys.argv).execute()
inst_A = A()
inst_A.funct()
Спасибо за помощь.