如何模拟“myscript.py> mylog.txt”

时间:2011-11-07 13:00:18

标签: python logging

我尝试实现一个选项,将控制台输出另外保存到文件中。 (如果该选项已激活)

我找到了两种方法: 1.使用日志记录模块 2.写一个这样的课:

class MyWriter: 
    def __init__(self, stdout, filename): 
        self.stdout = stdout 
        self.logfile = file(filename, 'a') 
    def write(self, text): 
        self.stdout.write(text) 
        self.logfile.write(text) 
    def close(self): 
        self.stdout.close() 
        self.logfile.close()  

但我遇到了问题。 一些代码片段将在新进程中执行。这种方式无法捕捉到他们的印刷品。

当我启动我的程序时

"myscript.py > mylog.txt"

它有效。他得到了所有的照片。但是如何在我的脚本中以功能方式模拟这个?

3 个答案:

答案 0 :(得分:1)

如果我理解正确,您想重定向您刚才开始的其他流程的stdout吗?

然后你所要做的就是使用

subprocess.Popen(...)

命令。然后你可以使用你的MyWriter课程。

答案 1 :(得分:1)

我的建议是使用日志记录模块,使用sockethandler并推送到将收到的日志写入文件的套接字服务器。

我希望它有所帮助

答案 2 :(得分:0)

问题可能必须解决如何执行新进程,您需要从主进程中的子进程收集输出,或者将文件名传递给子进程。您可以将环境变量用于文件名而不是将其作为参数传递,然后在子进程中也可以轻松访问日志文件。