Tôi có một dự án lớn bao gồm đủ số lượng mô-đun, mỗi mô-đun in một thứ gì đó với đầu ra tiêu chuẩn. Bây giờ khi dự án đã phát triển về kích thước, không có lớn. của print
báo cáo in rất nhiều trên std ra mà đã làm cho chương trình chậm hơn đáng kể.Chuyển hướng stdout thành "không có gì" trong python
Vì vậy, bây giờ tôi muốn quyết định tại thời điểm thời gian chạy có in bất kỳ thứ gì lên thiết bị xuất chuẩn hay không. Tôi không thể thực hiện thay đổi trong các mô-đun như có rất nhiều người trong số họ. (Tôi biết tôi có thể chuyển hướng stdout sang một tệp nhưng ngay cả điều này cũng chậm đáng kể.)
Vì vậy, câu hỏi của tôi là làm thế nào để chuyển hướng stdout thành không có gì tức là làm thế nào để làm cho câu lệnh print
không làm gì?
# I want to do something like this.
sys.stdout = None # this obviously will give an error as Nonetype object does not have any write method.
Hiện tại, ý tưởng duy nhất tôi có là tạo lớp học có phương thức ghi (không có gì) và chuyển hướng stdout tới phiên bản của lớp này.
class DontPrint(object):
def write(*args): pass
dp = DontPrint()
sys.stdout = dp
Có cơ chế sẵn có trong python cho điều này không? Hay có cái gì tốt hơn thế này?
liên quan: [Redirect stdout to a file in Python?] (Http://stackoverflow.com/q/4675728/4279) – jfs
Tôi vừa phát hiện ra một điều kỳ lạ. Biến sys.stdout thành None không thực sự hoạt động trong chương trình của tôi, mặc dù tôi không chắc tại sao. Tôi đã có * thực sự * vấn đề lạ với mã hóa chuyển hướng đến os.devnull vì vậy tôi đã cố gắng chỉ bằng cách sử dụng None, và nó hoạt động. Có thể có một cái gì đó để làm với tôi làm nó trong một bài kiểm tra đơn vị Django, nhưng tôi không chắc chắn. – Teekin