подпроцесс, выполняющий python, получает ошибку импорта - PullRequest
3 голосов
/ 04 декабря 2011

Я пытаюсь запустить скрипт Python из программы Python, отключив его от подпроцесса (причина в том, что основная программа должна была завершиться при запуске скрипта, с комбинацией wx.CallAfter и 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 ]

1 голос
/ 19 декабря 2011

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

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

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

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

0 голосов
/ 05 декабря 2011

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

От os / python docs :

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

( упор мой)

...