Python subprocess.Popen () не работает в контейнере Docker - отлично работает локально - PullRequest
0 голосов
/ 15 февраля 2019

Я создал каркасный проект Django REST, который хочу развернуть на сервере.У меня нет доступа администратора к серверу, и поэтому я нашел единственный способ убедиться, что все зависимости проекта (такие как распределение Anaconda) будут доступны на сервере, это создать образ докера для моего проекта, а затем создатьсоответствующий контейнер на сервере, затем запустите его оттуда.

В моем проекте у меня есть сценарий python (mymain.py), который вызывается с помощью subprocess.Popen ().Это прекрасно работает локально, и subprocess.Popen () делает все, что должен.

Однако, когда я пытаюсь сделать это из контейнера докера, кажется, что строка subprocess.Popen () былаполностью пропущен [mymain.py не называется].

Для докера я создал файл docker-compose.yml, и в командной строке я набираю:

docker-compose up

Я неувидеть любую ошибку, и все, кажется, работает нормально, однако subprocess.Popen (), кажется, не работает.

mymain.py первая строка:

print('Testing if subprocess called mymain.py!!!')  

В другомфайл, я вызываю subprocess.Popen ().Я попытался распечатать ошибку, но, к сожалению, и stdout, и stderr ничего не возвращают:

p = subprocess.Popen(['python', mymain_path, args], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
out, err = p.communicate()
print('SUBPROCESS ERROR: ' + str(err))
print('SUBPROCESS stdout: ' + str(out.decode()))    

И вот что я получаю:

SUBPROCESS ERROR: None
SUBPROCESS stdout:

Как видите, первая строкамоего main.py никогда не печатался ...

Однако, когда я делаю это локально, набирая в командной строке:

python manage.py runserver 9000

все работает без проблем (строка «Тестирование, еслипечатается подпроцесс mymain.py !!!.)

Я даже пытался открыть оболочку контейнера Docker и набрать там ту же команду 'python manage.py runserver 9000', но, к сожалению, это не сработало.

Теперь вопрос в том, как заставить подпроцесс работать удаленно (в контейнере Docker)?

Любая помощь по этому вопросу очень ценится!

Я использую:

Docker version 18.09.2, build 6247962
docker-compose version 1.23.2, build 1110ad01
Python 3.7.0

1 Ответ

0 голосов
/ 12 марта 2019

Похоже, что способ избавиться от этой проблемы заключается в следующем: 1. использовать 'shell = False' 2. Не иметь возвращаемого значения для 'subprocess.Popen ()'

subprocess.Popen(['python', mymain_path, args], shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...