我有一些代码可以从命令行将变量传递给脚本。我可以将任何值传递function
给var
arg。问题是,当我放入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()
感谢所有的帮助。