Python的解释器默认启用输出缓冲sys.stdout吗?
如果答案是肯定的,那么禁用它的所有方法是什么?
建议到目前为止:
-u命令行开关sys.stdout在每次写入后刷新的对象PYTHONUNBUFFEREDenv varsys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)是否有任何其他方式来设置一些全局标志sys/ sys.stdout程序执行过程中?
我需要在 docker 中激活环境并在此环境中运行命令。我创建了环境,但随后我尝试激活此环境并以这种方式运行命令:
CMD [ "source activate mro_env && ipython kernel install --user --name=mro_env" ]
Run Code Online (Sandbox Code Playgroud)
但是当我运行 docker 时出现错误:
[FATAL tini (8)] exec source activate mro_env && ipython kernel install
--user --name=mro_env failed: No such file or directory
Run Code Online (Sandbox Code Playgroud)
这是整个 Dockerfile:
FROM continuumio/miniconda3
ADD /src/mro_env.yml /src/mro_env.yml
RUN conda env create -f /src/mro_env.yml
# Pull the environment name out of the mro_env.yml
RUN echo "source activate $(head -1 /src/mro_env.yml | cut -d' ' -f2)" > ~/.bashrc
ENV PATH /opt/conda/envs/$(head -1 /src/mro_env.yml | cut …Run Code Online (Sandbox Code Playgroud) 这里的目的是使用docker容器作为安全沙箱来运行不受信任的python脚本,但是使用docker-py模块在python中执行此操作,并且能够捕获该脚本的输出.
我在docker容器中运行python脚本foo.py(它ENTRYPOINT在我的Dockerfile中设置为命令,所以它在容器运行后立即执行)并且无法捕获该脚本的输出.当我使用普通CLI运行容器时
docker run -v /host_dirpath:/cont_dirpath my_image
Run Code Online (Sandbox Code Playgroud)
(host_dirpath是包含foo.py的目录)我得到foo.py的预期输出打印到stdout,这只是一个键值对的字典.但是,我正在尝试使用docker-py模块在python中执行此操作,并且不知何故该logs方法未捕获脚本输出.这是我正在使用的python代码:
from docker import Client
docker = Client(base_url='unix://var/run/docker.sock',
version='1.10',
timeout=10)
contid = docker.create_container('my_image', volumes={"/cont_dirpath":""})
docker.start(contid, binds={"/host_dirpath": {"bind": "/cont_dirpath"} })
print "Docker logs: " + str(docker.logs(contid))
Run Code Online (Sandbox Code Playgroud)
这只会导致"Docker日志:" - 日志中没有捕获任何内容,stdout和stderr都没有(我尝试在foo.py中引发异常来测试它).
我之后的结果是由foo.py计算的,目前只是用python print语句打印到stdout .如何将它包含在docker容器日志中,以便我可以在python中读取它?或者从容器外部以其他方式捕获此输出?
任何帮助将不胜感激.提前致谢!
编辑:
使用docker-py仍然没有运气,但是当使用subprocess.Popen使用普通CLI运行容器时它运行良好 - 执行此操作时,输出确实被stdout正确抓取.
所以,我在Docker容器中运行了一些Python代码.我使用Google的gcloud脚本启动了我的本地环境.我看到了基本的访问方式日志和健康检查信息,但我不知道如何通过我从Python应用程序写入控制台的日志消息.是否有一个参数我可以设置为使用我的gcloud脚本完成此操作,或者我可以在Dockerfile中设置哪些可以帮助的参数?
我有一个简单的代码,我已经创建了一个docker容器,状态显示它运行正常.在代码中我使用了一些print()命令来打印数据.我想看看打印命令输出.
为此,我看到了docker日志.但它似乎没有工作,因为它没有显示日志.如何查看日志.?
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a3b3fd261b94 myfirstdocker "python3 ./my_script…" 22 minutes ago Up 22 minutes elegant_darwin
$ sudo docker logs a3b3fd261b94
<shows nothing>
Run Code Online (Sandbox Code Playgroud) 我让Kubernetes在pod中设置并运行grpc服务.我成功地在服务端点击了一个端点,其中有一个print()语句,但我在日志文件中看不到任何日志.我之前在Kubernetes中运行(cron)作业时看到过这种情况,日志只在作业完成后出现(而不是在作业运行时).有没有办法让kubernetes立即写入日志文件?我可以放置的任何设置(群集级别还是仅用于pod)?在此先感谢您的帮助!
我有一个简单的脚本,每 2 秒打印一次 hello。
# entry.py
import time
while True:
print("hello")
time.sleep(2)
Run Code Online (Sandbox Code Playgroud)
我有一个运行此脚本的超简单 docker 文件。
FROM python:3.9
COPY entry.py entry.py
CMD python entry.py
Run Code Online (Sandbox Code Playgroud)
首先我构建docker镜像:
FROM python:3.9
COPY entry.py entry.py
CMD python entry.py
Run Code Online (Sandbox Code Playgroud)
现在我用这个-it选项运行它,它按预期工作。
$ docker build -t dtest .
Run Code Online (Sandbox Code Playgroud)
但是当我在分离模式下运行它,然后尝试查看日志时,我什么也看不到。
$ docker run -it dtest
# hello printed to screen every two seconds
Run Code Online (Sandbox Code Playgroud) 我有一个在 Docker 容器中运行的 Django Proj
我的 Debug=True
但是 docker up logging 没有显示任何print('xxxx')输出。
有办法解决吗?谢谢!
docker ×6
python ×5
logging ×3
anaconda ×1
boot2docker ×1
buffered ×1
conda ×1
django ×1
docker-logs ×1
dockerfile ×1
dockerpy ×1
gcloud ×1
kubernetes ×1
linux ×1
stdout ×1