VFP - PROGRAM() devuelve el nombre del procedimiento, función, formulario, etc

79 views
Skip to first unread message

Antonio Meza

unread,
May 31, 2019, 11:06:14 PM5/31/19
to VFP a Python
Es posible obtener el nombre de la función en Python 3

ejemplo VFP pero debe estar en un archivo prg, desde la linea de comandos no devuelve nada

PROCEDURE Hola
     ? PROGRAM()
ENDPROC

Devuelve "Hola"

En Python si tengo

def Hola(self):
    pass



Como devuelvo el nombre?

saludos
Antonio Meza

Carlos Miguel FARIAS

unread,
Jun 1, 2019, 9:03:26 AM6/1/19
to vfp-a-python
# -*- coding: utf-8 -*-
import inspect
"""
inspect.stack()
Devuelve una lista de registros de las llamadas. La primera entrada en la lista devuelta representa el llamador; La última entrada representa la llamada más externa en la pila.
"""
def miNombre():
	return inspect.stack()[1][3]
 
def deDonde():
	result=""
	for i in range(2,len(inspect.stack())-1):
		if result:
			result+="|"
		result+=inspect.stack()[i][3]
	return result
 
def primera():
	print("Estoy en la función '%s', ha sido llamada desde: %s" % (miNombre(), deDonde()))
	segunda()
 
def segunda():
	print("Estoy en la función '%s', ha sido llamada desde: %s" % (miNombre(), deDonde()))
	tercera()
 
def tercera():
	print("Estoy en la función '%s', ha sido llamada desde: %s" % (miNombre(), deDonde()))
 
primera()
segunda()
Fuente: https://www.lawebdelprogramador.com/codigo/Python/3751-Obtener-el-nombre-de-la-funcion-donde-nos-encontramos-y-de-donde-es-llamada.html

En un módulo, puedes obtener el nombre del modulo con __name__, salvo que sea el primer módulo que te devuelve __main__
Por eso, para probar un modulo, al final, puedes colocar

if __name__ == "__main__":
    # aqui va todo el código del test. Esto solo se ejecuta cuando se invoca...
    # el modulo directamente y no desde otro programa

Saludos: Miguel

--
Has recibido este mensaje porque estás suscrito al grupo "VFP a Python" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a vfp-a-python...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a vfp-a-...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/vfp-a-python.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/vfp-a-python/81821428-703b-4c9a-8f0e-15f5c289a1a0%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Antonio Meza

unread,
Jun 1, 2019, 3:51:39 PM6/1/19
to VFP a Python
Muchas gracias Miguel!!!

Después de 2 horas tratando de entender el código te cuento que no lo entendí jajajajajajja pero al final obtuve lo que necesitaba.

No pude pasar el nombre de forma directa, tuve que usar una función como en el ejemplo que me diste y listo. lo que hacia es tener una constante a la que le ponía el nombre de forma manual, pero ahora ya lo obtengo desde la función

def connect(self):
#FUNCTION_NAME = "connect"
#FUNCTION_NAME = inspect.stack()[1][3]
FUNCTION_NAME = self.function_name()


def function_name(self):
return inspect.stack()[1][3]

Ahora estoy buscando como obtener el nombre del archivo, pero solo el nombre sin la exención .py, Para evitar tener que poner el nombre del archivo a una constante, lo mismo que hice arriba pero con el nombre físico del archivo.

saludos y Gracias de nuevo!!!
Antonio Meza
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a vfp-a-...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages