Python importa dinámicamente un script, debe tener su código __name__ == “__main__” para ser llamado

Al importar una secuencia de comandos de Python desde otra secuencia de comandos, quiero el código de secuencia de comandos que está protegido clásicamente por

if __name__ == "__main__": .... .... 

para ser ejecutado, ¿cómo puedo ejecutar ese código?

Lo que estoy tratando de hacer es desde un script de python, cambiar dinámicamente un módulo, luego importar un script existente que debería ver los cambios realizados y ejecutar su código __main__ como si hubiera sido invocado directamente por python.

Necesito ejecutar la segunda secuencia de comandos de python en el mismo espacio de nombres que la primera secuencia de comandos de python y pasar los parámetros de la segunda línea de comandos de la secuencia de comandos. execfile () sugerido a continuación podría funcionar pero eso no toma ningún parámetro de línea de comando.

Preferiría no editar la segunda secuencia de comandos (código externo), ya que quiero que la primera secuencia de comandos sea una envoltura alrededor de ella.

Si puede editar el archivo que se está importando, una opción es seguir el principio básico de colocar un código importante dentro de las funciones.

 # Your script. import foo foo.main() # The file being imported. def main(): print "running foo.main()" if __name__ == "__main__": main() 

Si no puede editar el código que se está importando, execfile proporciona un mecanismo para pasar argumentos al código importado, pero este enfoque me pondría nervioso. Utilizar con precaución.

 # Your script. import sys import foo bar = 999 sys.argv = ['blah', 'fubb'] execfile( 'foo.py', globals() ) # The file being exec'd. if __name__ == "__main__": print bar print sys.argv