私信  •  关注

David Cullen

David Cullen 最近创建的主题
David Cullen 最近回复了
6 年前
回复了 David Cullen 创建的主题 » 在python中只捕获stdout的输出

您可以定义自己的版本 print 功能如下:

import sys

def get_my_print(file=sys.stdout):
    _original_print = print
    def my_print(*objects, sep='', end='\n', file=file, flush=False):
        _original_print(*objects, sep='', end='\n', file=file, flush=False)
    return my_print

original_print = print
print("Redirect print to stderr...")
print = get_my_print(sys.stderr)

print("Print some numbers...")
for x in range(10):
    print(x)

print = original_print
print("Done.")

慰问

$ python3 redirect_print.py 1> /dev/null
Print some numbers...
0
1
2
3
4
5
6
7
8
9
6 年前
回复了 David Cullen 创建的主题 » 有没有在python控制台上记录自动生成的消息的方法?

可以使用上下文管理器临时截获对 sys.stderr.write 并将消息写入文件:

import pandas as pd
import sys

class CaptureErrors:
    def __init__(self, stderr, output_name):
        self.stderr = stderr
        self.output_name = output_name
        self.output_file = None

    def __enter__(self):
        self.output_file = open(self.output_name, "w")
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        if self.output_file:
            self.output_file.close()
        sys.stderr = self.stderr

    def write(self, message):
        self.stderr.write(message)
        self.output_file.write(message)

def main():
    filename = "test_data3.csv"
    with CaptureErrors(sys.stderr, 'error.txt') as sys.stderr:
        data = pd.read_csv(filename, error_bad_lines=False)
    print(data.head())

if __name__=="__main__":
    main()

如果这不是您要找的,您可能需要向您的问题添加更多信息。