J'ai un code pour transmettre une variable dans un script à partir de la ligne de commande. Je peux passer n'importe quelle valeur dans function
pour l'argument var
. Le problème est que lorsque je mets function
dans une classe, la variable n'est pas lue dans function
. Le script est:Passer une valeur dans la classe Python via la ligne de commande
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()
Cela fonctionne en entrant ./function <function> <arg1 arg2 ....>
. Le problème est que je veux sélectionner la fonction que je veux qui est dans une classe plutôt que juste une fonction par elle-même. Le code que j'ai essayé est le même sauf que function(var):
est dans une classe. J'espérais quelques idées sur la façon de modifier ma classe function_call
pour l'accepter.
Si je veux transmettre la valeur Hello
, je lance le script comme ceci - python function_call.py function Hello
. Cela imprime ensuite la variable var
en tant que Hello
.
En entrant la variable dans les lignes de commande, je peux ensuite utiliser cette variable dans tout le code. Si le script était un tas de fonctions, je pouvais simplement sélectionner la fonction en utilisant ce code, mais je voudrais sélectionner les fonctions à l'intérieur d'une classe particulière. Au lieu de python function.py function hello
je pourrais entrer dans la classe aussi, par exemple. python function.py A function hello
.
J'ai également rencontré que j'ai un problème en enregistrant la valeur pour une utilisation en dehors de la fonction. Si quelqu'un pouvait résoudre cela, je l'apprécierais beaucoup. _________________________________________________________________________________
Code modifié. C'est le code qui fonctionne pour moi maintenant.
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()
Merci pour toute l'aide.
@SilentGhost - Si j'avais simplement une fonction comme 'def run' avec la variable' var', comment pourrais-je obtenir cet attribut d'une autre classe? Merci – chrissygormley
@chriss: demandez-vous sur l'argument? vous pouvez simplement le passer dans l'appel normal (dernières parenthèses): 'getattr (A(), 'courir') ('arg1')' – SilentGhost
@SilentGhost - +1 Merci pour cela mais je dois laisser la question ouverte comme cette réponse ne répond pas à la question sur la façon de passer l'argument de la ligne de commande dans cette classe. – chrissygormley