相关疑难解决方法(0)

装饰\委托File对象以添加功能

我一直在编写一个小的Python脚本,它使用subprocess模块和辅助函数执行一些shell命令:

import subprocess as sp
def run(command, description):
    """Runs a command in a formatted manner. Returns its return code."""
    start=datetime.datetime.now()
    sys.stderr.write('%-65s' % description)
    s=sp.Popen(command, shell=True, stderr=sp.PIPE, stdout=sp.PIPE)
    out,err=s.communicate()
    end=datetime.datetime.now()
    duration=end-start
    status='Done' if s.returncode==0 else 'Failed'
    print '%s (%d seconds)' % (status, duration.seconds)
Run Code Online (Sandbox Code Playgroud)

以下行读取标准输出和错误:

    s=sp.Popen(command, shell=True, stderr=sp.PIPE, stdout=sp.PIPE)
    out,err=s.communicate()
Run Code Online (Sandbox Code Playgroud)

如您所见,未使用stdout和stderr.假设我想以格式化的方式将输出和错误消息写入日志文件,例如:

[STDOUT: 2011-01-17 14:53:55] <message>
[STDERR: 2011-01-17 14:53:56] <message>
Run Code Online (Sandbox Code Playgroud)

我的问题是,最恐怖的方式是什么?我想到了三个选择:

  1. 继承文件对象并覆盖该write方法.
  2. 使用实现的Delegate类write.
  3. PIPE某种方式连接到自身.

更新:参考测试脚本

我正在使用此脚本检查结果,保存为test.py:

#!/usr/bin/python
import sys

sys.stdout.write('OUT\n')
sys.stdout.flush()
sys.stderr.write('ERR\n')
sys.stderr.flush() …
Run Code Online (Sandbox Code Playgroud)

python logging subprocess design-patterns

14
推荐指数
1
解决办法
1199
查看次数

保持子进程存活并继续给它命令?蟒蛇

如果我subprocess用给定的命令在python中生成一个新的(假设我用python命令启动python解释器),我如何将新数据发送到进程(通过STDIN)?

python subprocess process popen

9
推荐指数
1
解决办法
2万
查看次数

标签 统计

python ×2

subprocess ×2

design-patterns ×1

logging ×1

popen ×1

process ×1