python subprocesso Ambiente Popen PATH?

Estou confuso sobre comosubprocess procura o executável ao usarPopen(). Funciona se dados caminhos absolutos para o processo filho, mas estou tentando usar caminhos relativos. Descobri que se eu definir a variável de ambiente PYTHONPATH, posso obter módulos importados desse caminho, ok, e PYTHONPATH estará lá emsys.path, mas parece não ajudar no comportamento desubprocess.Popen. Eu também tentei editar ositecustomize.py arquivo adicionando PYTHONPATH aos.environ, igual

# 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')])

e verificou que, ao iniciar o python, de maneira interativa, com o ipython, ou executando um script na linha de comando, o PYTHONPATH está aparecendo com êxito emos.environ. Contudo,subrocess.Popen aind não procura lá o executável. Eu pensei que era para herdar o ambiente dos pais, se nãoenv kwarg está especificado? Em seguida, tentei darenv explicitamente, primeiro fazendo uma cópia deos.getenv e, em segundo lugar, apenas dandoenv={'PATH': '/explicit/path/to/search/from'} e ainda não encontra o executável. Agora estou perplexo.

Felizmente, um exemplo ajudará a explicar meu problema com mais clareza:

/ 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()

Se eu estiver em/dir/subdir2 e eu corropython some_script.py funciona, mas se eu estiver em/dir e eu corropython subdir2/some_script.py Apesar de/dir/subdir2 está noos.environ['PATH'], o subprocesso lançaráOSError: [Errno 2] No such file or directory.

questionAnswers(4)

yourAnswerToTheQuestion