コマンドラインから変数をスクリプトに渡すコードがいくつかあります。引数に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()
すべての助けをありがとう。