Pregunta

Estoy tratando de ejecutar un script de Python de un programa de Python al comenzar el subproceso (la razón es que el programa principal debe haber salido cuando se ejecuta el script, con una combinación de wx.callafter y cerrado). Sin embargo, cuando se ejecuta el script, recibo un error en la línea 1 con ImportError: No module named os Lo que me hace pensar que tiene algo que ver con el Pythonpath, pero puedo ejecutar el guión muy bien desde una terminal.

¿Por qué el script no puede ver ningún módulo central cuando se ejecuta de esta manera?

Editar: La línea en cuestión es:

wx.CallAfter(subprocess.Popen,'python %s "%s" %s %s'%(os.path.join(BASE_DIR,"updatecopy.py"),BASE_DIR,pos[0],pos[1]),shell=True)

Base_dir es solo el directorio en el que vive el script.

¿Fue útil?

Solución

El subproceso está ahí porque OS.Exec* se ha desactivado, por lo que no sugeriría usar eso en lugar de Popen como sugirió alguien.

He visto surgir este problema cuando se extiende desde un proceso congelado. Si ese es el caso, lo más probable es que esté heredando un entorno extraño para el nuevo proceso de Python.

La mayoría de los scripts congelados intentarán ejecutarse desde un archivo zip, en cuyo caso no es de extrañar que Python no pueda encontrar nada, todo está atrapado en un archivo zip :)

Si esta es la situación, intente ejecutar usando el ejecutable de Python que está usando para ejecutar el script congelado. Debería poder lidiar con el entorno especial.

Otros consejos

Tal vez podrías usar os.execv en lugar de popen.

De OS/Python Docs:

Todas estas funciones ejecutan un nuevo programa, Reemplazo del proceso actual; No regresan. En UNIX, el nuevo ejecutable se carga en el proceso actual y tendrá la misma ID de proceso que la persona que llama. Los errores se informarán como excepciones de Oserror.

(énfasis mía)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top