подпроцесс запуск python получение ошибки импорта


Я пытаюсь запустить скрипт python из программы python, отбросив его из подпроцесса (причина в том, что основная программа должна была выйти, когда скрипт запускается, с комбинацией wx.Call after и Close). Однако, когда скрипт запускается, я получаю ошибку в строке 1 с ImportError: No module named os, что заставляет меня думать, что это как-то связано с PythonPath, но я могу запустить скрипт просто отлично с терминала.

Почему скрипт не видит никаких основных модулей, когда выполняется таким образом?

Править: То строка, о которой идет речь:

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 - это просто каталог, в котором живет скрипт.

2 3

2 ответа:

Подпроцесс существует потому, что ОС.exec* был устаревшим, поэтому я бы не предложил использовать его вместо Popen, как кто-то предложил.

Я видел, как эта проблема возникает при запуске из замороженного процесса. Если это так, то вы, скорее всего, наследуете странную среду для нового процесса python.

Большинство замороженных скриптов будут пытаться запустить из zip-файла, и в этом случае неудивительно, что Python ничего не может найти, все это заперто в zip-файле:)

Если в этом случае попробуйте запустить исполняемый файл python, который используется для запуска замороженного сценария. Он должен уметь справляться с особыми условиями.

Может быть, вы могли бы использовать os.execv вместо Popen.

из os / python docs:

Все эти функции выполняют новую программу, заменяющую текущий процесс; они не возвращаются. В Unix новый исполняемый файл загружается в текущий процесс и будет иметь тот же идентификатор процесса, что и вызывающий. Ошибки будут сообщаться как исключения OSError.

(курсив Мой)