Python文件中將print的輸出內容重定向到變量中


有時候需要用到別人的代碼, 但是又不想修改別人的文件, 想拿到輸出的結果, 這時候就需要使用sys模塊, 將print輸出的內容重定向到變量中.

Python調用sys模塊中的sys.stdout, 實際上是調用的sys.stdout.write方法, 這樣如果操作的對象是文件就不會有問題.

import sys
# 保存當前的sys.stdout狀態, 開始捕獲當前的輸出
current = sys.stdout
f = open(path, 'w')
# 這一步實際是sys.stdout.write, 當sys捕獲到了print輸出的時候, 就寫入f里面
sys.stdout = f
print 'test'
# 恢復狀態, 之后的print內容都不捕獲了
sys.stdout = current

但是當把f文件對象改為一個變量時, 就會報錯AttributeError: 'str' object has no attribute 'write', 原因是變量沒有write方法, 所以根據這個, 我們可以重寫一個方法.

import sys

class __Autonomy__(object):
    """
    自定義變量的write方法
    """
    def __init__(self):
        """
        init
        """
        self._buff = ""

    def write(self, out_stream):
        """
        :param out_stream:
        :return:
        """
        self._buff += out_stream


current = sys.stdout
a = __Autonomy__()
# 會調用a的write方法, 和self._buff的內容拼接
sys.stdout = a
print 'test'
sys.stdout = current

# 輸出捕獲的內容
print a._buff


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM