Domanda

Sto cercando di eseguire una sceneggiatura Python da un programma Python dando il via al sottoprocesso (il motivo è che il programma principale deve essere uscito quando lo script funziona, con una combinazione di WX.Callafter e Close). Tuttavia, quando lo script viene eseguito un errore sulla riga 1 con ImportError: No module named os Il che mi fa pensare che abbia a che fare con il Pythonpath, ma posso eseguire la sceneggiatura bene da un terminale.

Perché lo script non può vedere moduli principali quando esegui in questo modo?

EDIT: la riga in questione è:

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 è solo la directory in cui vive la sceneggiatura.

È stato utile?

Soluzione

Il sottoprocesso è lì perché OS.exec* è stato deprecato, quindi non suggerirei di usarlo al posto di Popen come suggerito da qualcuno.

Ho visto questo problema emergere quando sono passato da un processo congelato. In tal caso, molto probabilmente stai ereditando un ambiente strano per il nuovo processo di Python.

La maggior parte degli script congelati proverà a correre da un file zip, nel qual caso non c'è da meravigliarsi che Python non riesca a trovare nulla, è tutto intrappolato in un file zip :)

Se questa è la situazione, prova a eseguire l'eseguibile Python che si sta usando per eseguire lo script congelato. Dovrebbe essere in grado di affrontare l'ambiente speciale.

Altri suggerimenti

Forse potresti usare os.execv invece di Popen.

Da Documenti OS/Python:

Queste funzioni eseguono tutte un nuovo programma, Sostituzione del processo corrente; Non tornano. Su Unix, il nuovo eseguibile viene caricato nel processo corrente e avrà lo stesso ID di processo del chiamante. Gli errori saranno segnalati come eccezioni di Oserror.

(enfasi il mio)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top