Я хотел сказать, что каталог, из которого выполняется python, этот каталог добавляется в pythonpath. Здесь во втором случае добавляется / dir, а не / dir / subdir2. Таким образом, вы можете либо изменить свой код, чтобы отразить изменения (одним из способов может быть добавление / dir / subdir2 к os.path в вашем коде), либо запустить python из соответствующей директории.

утался в том, какsubprocess ищет исполняемый файл при использованииPopen(), Это работает, если заданы абсолютные пути к дочернему процессу, но я пытаюсь использовать относительные пути. Я обнаружил, что если я устанавливаю переменную окружения PYTHONPATH, то я могу получить импортированные модули по этому пути, и PYTHONPATH находится вsys.path, но это, кажется, не помогает с поведениемsubprocess.Popen, Я также пытался редактироватьsitecustomize.py добавление файла PYTHONPATH вos.environ, вот так

# copy PYTHONPATH environment variable into PATH to allow our stuff to use
# relative paths for subprocess spawning
import os
if os.getenv('PYTHONPATH') is not None and os.getenv('PATH') is not none:
    os.environ['PATH'] = ':'.join([os.getenv('PATH'), os.getenv('PYTHONPATH')])

и проверил, что при запуске python, в интерактивном режиме, с ipython или при запуске сценария из командной строки, PYTHONPATH успешно появляется вos.environ, Тем не мение,subrocess.Popen Все еще не ищет там исполняемый файл. Я думал, что это должно было унаследовать среду родителей, если нетenv кварг указан? Затем я попытался датьenv явно, сначала сделав копиюos.getenv а во-вторых, просто даваяenv={'PATH': '/explicit/path/to/search/from'}и до сих пор не находит исполняемый файл. Теперь я в тупике.

Надеюсь, пример поможет объяснить мою проблему более четко:

/ DIR / subdir1 / some_executable
/dir/subdir2/some_script.py

# some_script.py
from subprocess import Popen, PIPE
spam, eggs = Popen(['../subdir1/some_executable'], stdout=PIPE, stderr=PIPE).communicate()

Если я в/dir/subdir2 и я бегуpython some_script.py это работает, но если я в/dir и я бегуpython subdir2/some_script.py даже не смотря на/dir/subdir2 находится вos.environ['PATH']тогда подпроцесс скинетOSError: [Errno 2] No such file or directory.

Ответы на вопрос(4)

Ваш ответ на вопрос