您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

【原文】python如何安全创建子流程? <源码交易平台>

  • 时间:2022-07-13 01:36 编辑: 来源: 阅读:321
  • 扫一扫,手机访问
摘要:【原文】python如何安全创建子流程? <源码交易平台>
1背景最近一个模块调用ansible执行任务时,打印没有错误,判断执行成功,实际执行失败。 故障排除只是因为代码中既没有命令的返回值,也没有错误输出,只有标准输出中的错误打印来判断成功还是失败。事实上,标准输出中的错误打印只有在命令本身成功执行时才会输出。这种判断方法很可能导致对命令成功执行的误判。 而且一旦失败,对错误的定位是非常不利的。 这个描述是专门为了防止其他模块的当前python代码执行操作系统命令时出现类似情况而准备的。 2典型错误2.1直接用os.popen创建,但不解决返回错误码的后果:2.1.1对于只有错误打印的,调用者会误判执行成功。2.1.2如果调用命令挂起,会导致主进程挂起。2.2 Create with subprocess.popen,要么未定义stderr,要么定义了stderr,但没有从stderr中读取任何信息。也没有解决返回代码的后果:2.2.1当stderr满时,主进程挂起。2.2类似于os.popen,当调用一个命令并有错误打印输出时,会误判为执行成功。3推荐用法3.1命令的执行时间没有限制,或者有人认为不会挂。而不在乎错误输出的人就用这个(一般不推荐):def test _ OS _ popen _ func(cmd):stdout,proc = OS . popen(cmd)if proc . close:return false," " return true,Stdout.read()3.2命令的执行时间是有限制的,或者当你认为命令可能会挂起,或者你担心命令输出错误的时候可以用这个。默认超时为15秒:def test _ subprocess _ popen _ func(cmd,time out = 15):proc = subprocess . popen(cmd,stdout=PIPE,stderr = PIPE)retruncode = 0x ff try:outs,errs = proc . communicate(time out = time out)retruncode = proc . poll()except time out expired:proc . kill()outs,Errs = proc。communicate()返回重试代码,outs,errs上面列举的这些错误调用方法在python的标准库和一些开源库(比如著名的ansible)中非常常见,这只能说明很多python程序员只关注程序执行成功时代码怎么写,而当程序执行失败时,他们就处于一种不关注的状态,这对于在生产环境中的使用是非常不利的。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部