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

StackOverflow https://stackoverflow.com/questions/8377745

  •  28-10-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

Из ОС/Python Docs:

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

(акцент мой)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top