栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

运行子流程并将输出打印到日志

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

运行子流程并将输出打印到日志

我敢肯定有一种方法可以做到,而无需创建临时文件来存储进程输出

您只需要检查的文档

Popen
,尤其是有关
stdout
和的文档
stderr

stdin
stdout
并分别
stderr
指定执行程序的标准输入,标准输出和标准错误文件句柄。有效值为
PIPE
:现有文件描述符(正整数),现有文件对象和
None
PIPE
指示应创建到子级的新管道。使用默认设置时
None
,将不会发生重定向。子级的文件句柄将从父级继承。另外,
stderr
可以是
STDOUT
,表示
stderr
来自子进程的数据应捕获到与相同的文件句柄中
stdout

因此,您可以看到可以使用文件对象或

PIPE
值。这使您可以使用该
communicate()
方法来检索输出:

from StringIO import StringIOprocess = subprocess.Popen(arguments, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)output, error = process.communicate()log_subprocess_output(StringIO(output))

我会将您的代码重写为:

import shleximport loggingimport subprocessfrom StringIO import StringIOdef run_shell_command(command_line):    command_line_args = shlex.split(command_line)    logging.info('Subprocess: "' + command_line + '"')    try:        command_line_process = subprocess.Popen( command_line_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,        )        process_output, _ =  command_line_process.communicate()        # process_output is now a string, not a file,        # you may want to do:        # process_output = StringIO(process_output)        log_subprocess_output(process_output)    except (OSError, CalledProcessError) as exception:        logging.info('Exception occured: ' + str(exception))        logging.info('Subprocess failed')        return False    else:        # no exception was raised        logging.info('Subprocess finished')    return True


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/596402.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号