У меня есть код для передачи переменной в скрипт из командной строки. Я могу передать любое значение в function
для var
arg. Проблема в том, что когда я кладу function
в класс, переменная не считывается в function
. Сценарий:Передайте значение в класс Python через командную строку
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()
Спасибо за помощь.
@SilentGhost - Если бы у меня была функция 'def run' с переменной' var', как я мог бы получить этот атрибут из другого класса? Спасибо – chrissygormley
@chriss: вы спрашиваете о аргументе? вы можете просто передать его в обычном вызове (последние скобки): 'getattr (A(), 'run') ('arg1')' – SilentGhost
@SilentGhost - +1 Спасибо за это, но я должен оставить вопрос открытым как этот ответ не отвечает на вопрос о том, как передать arg из командной строки в этом классе. – chrissygormley