django - Python subprocess.Popen()在Docker容器中不起作用-在本地工作正常

标签 django python-3.x docker subprocess

我创建了一个Django REST框架项目,该项目要部署在服务器上。我没有对该服务器的管理员访问权限,因此,我发现确保所有项目依赖项(例如Anaconda发行版)在服务器上均可用的唯一方法是为我的项目创建一个docker镜像,然后创建服务器上的相应容器,然后从那里运行它。

在我的项目中,我有一个使用subprocess.Popen()调用的python脚本(mymain.py)。
这在本地可以正常工作,subprocess.Popen()可以完成它应该做的所有事情。

但是,当我尝试从docker容器执行此操作时,似乎完全跳过了subprocess.Popen()行[未调用mymain.py]。

对于docker,我已经创建了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容器 shell 并在其中键入相同的'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.使用'shell = False'
2.没有'subprocess.Popen()'的返回值

subprocess.Popen(['python', mymain_path, args], shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 

关于django - Python subprocess.Popen()在Docker容器中不起作用-在本地工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54714478/

相关文章:

Docker compose 和 dockerfile/.htaccess 问题

Django 计算组内的百分比

python - 双重继承导致元类冲突

使用 Jquery、Django 和 Google App Engine 时,jQuery AJAX 请求被调用两次

python - Pandas 按预期 Str 实例分组,找到的 float

python - 在 RHEL 上安装 Python 3

python - 如何将 '$1,234.56'读取为1234.56

java - 连接到在 Docker 中运行的 Kafka

deployment - Docker 容器上的分布式系统 NSQ 拓扑模式

python - 如何在 Mac (Yosemite) 上找到我的 python/django 源代码