I don’t know exactly what you want to do, but the simplest answer for you is:
# nome = menuOpt[1]
globals().get(nome)()
But it is good not to let the code die if the name does not exist or if the name is not 'searchable', this can be achieved (using the: EAFP 'it is easier to ask for forgiveness than permission') so:
# nome = menuOpt[1]
try:
globals().get(nome)()
except TypeError:
pass
But I already had to do this for a plugins system where the complete package was needed (from pacote.x.y.z import funcao
), so I needed something more elaborate, like:
def getattrfull(path):
"""
Obtem um atributo de um caminho separado por '.' simulando um `import`
Exemplo para simular 'from os import name as sistema':
>>> sistema = getattrfull('os.name')
>>> sistema
'posix'
Funciona para funcoes/classes/etc:
>>> decode = getattrfull('json.loads')
>>> decode('[1, 2, 3, 4]')
[1, 2, 3, 4]
Se o modulo ou funcao nao existir ele retorna 'None'
>>> getattrfull('eu.nao.existo')
None
"""
# Primeiro tem que separar o modulo da funcao/classe/qualquercoisa
# XXX: o codigo só funciona se tiver ".", ou seja, não pega nomes
# locais ao arquivo atual, para fazer comportamento semelhante use:
# >>> globals().get(nome)
module_name, attr_name = path.rsplit(".", 1)
# importar modulo
try:
module = __import__(module_name, locals(), globals(), [str(attr_name)])
except ImportError:
return None
# procurar pelo atributo
try:
attr = getattr(module, attr_name)
except AttributeError:
return None
return attr