При передаче исполняемого файла = в Popen sys.executable пуст в дочернем - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь выполнить python из virtualenv с использованием Popen, но он берет один из /usr/bin (по крайней мере, то, что я думаю, см. Вывод ниже):

In [1]: import subprocess

In [2]: proc = subprocess.Popen(['my_program', '-c', 'import sys; print sys.executable; print sys.path;'], executable='/home/user/.pypy/bin/pypy', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
   ...: print proc.stdout.read(1024)
   ...: 

['', '/usr/lib/pypy/lib_pypy/__extensions__', '/usr/lib/pypy/lib_pypy', '/usr/lib/pypy/lib-python/2.7', '/usr/lib/pypy/lib-python/2.7/lib-tk', '/usr/lib/pypy/lib-python/2.7/plat-linux2', '/usr/local/lib/pypy2.7/dist-packages', '/home/user', '/usr/lib/pypy/dist-packages']


In [3]: proc = subprocess.Popen(['/home/user/.pypy/bin/pypy', '-c', 'import sys; print sys.executable; print sys.path;'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
   ...: print proc.stdout.read(1024)
   ...: 
/home/user/.pypy/bin/pypy
['', '/home/user/.pypy/lib_pypy/__extensions__', '/home/user/.pypy/lib_pypy', '/home/user/.pypy/lib-python/2.7', '/home/user/.pypy/lib-python/2.7/lib-tk', '/home/user/.pypy/lib-python/2.7/plat-linux2', '/usr/lib/pypy/lib_pypy', '/usr/lib/pypy/lib-python/2.7', '/usr/lib/pypy/lib-python/2.7/plat-linux2', '/usr/lib/pypy/lib-python/2.7/lib-tk', '/home/user/.pypy/site-packages', '/home/user']

youМожно видеть, что без параметра executable все выглядит нормально (как исполняемый, так и sys.path. Но как только я использую параметр, sys.executable представляет собой пустую строку, а sys.path - один из системных pypy.

Я могу работать без параметра executable, пока есть другой способ изменить имя процесса (я не смог найти, как это сделать)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...