我遇到了我的python腳本的問題。沉默記錄儀和打印到屏幕 - Python
它在屏幕上打印海量數據,我想阻止各種打印的屏幕。
編輯:
我使用的庫機械化,它的打印數據在屏幕上不少。
我已經把這些設置爲false,沒有運氣!
br.set_debug_redirects(False)
br.set_debug_responses(False)
br.set_debug_http(False)
任何想法?
幫助將是驚人的,非常感謝!
我遇到了我的python腳本的問題。沉默記錄儀和打印到屏幕 - Python
它在屏幕上打印海量數據,我想阻止各種打印的屏幕。
編輯:
我使用的庫機械化,它的打印數據在屏幕上不少。
我已經把這些設置爲false,沒有運氣!
br.set_debug_redirects(False)
br.set_debug_responses(False)
br.set_debug_http(False)
任何想法?
幫助將是驚人的,非常感謝!
(根據你的第二編輯)
如果你不想禁用所有的輸出,你可以試試具體到mechanize
本身。 http://wwwsearch.sourceforge.net/mechanize/提供了一個片斷,我已經修改了(雖然我不知道這是否會工作):
import logging
logger = logging.getLogger("mechanize")
# only log really bad events
logger.setLevel(logging.ERROR)
當你打印的東西它會通過sys.stdout
文件屏幕。你可以讓沒有打印屏幕文件更改爲任何其他文件(例如,你打開一個日誌文件):
import sys
# save the old stdout so you can print later (do sys.stdout = OLD_STDOUT)
OLD_STDOUT = sys.stdout
sys.stdout = open("logfile.txt", 'w')
當然,如果你在談論一些你調用庫,它可能會打印到sys.stderr
。幸運的是,你可以做同樣的事情爲這一個(從上面繼續):
OLD_STDERR = sys.stderr
sys.stderr = open("errorLog.txt", 'w')
現在,如果由於某種原因,你要完全忽略標準輸出(或標準錯誤),並永遠不會再看到它,你可以定義你自己的類文件類,簡單地丟棄的對象:
class Discarder(object):
def write(self, text):
pass # do nothing
# now discard everything coming out of stdout
sys.stdout = Discarder()
而且,添加到可能的解決方案的喧囂,這裏是在Unix外殼有效的解決方案:
# discards all input (change /dev/null to a file name to keep track of output)
python yourScript.py > /dev/null
感謝您的驚人回覆!對於True/False錯字 – RadiantHex 2010-04-09 05:18:03
您可能重定向sys.std out和sys.stderr添加到文件或任何類似您的對象的文件,例如
class EatLog(object):
def write(self):
pass
sys.stdout = EatLog()
但我不會建議,更簡單的選項是使用操作系統級重定向,例如,
python myscript.py > out.log
抱歉,如果您還需要重定向stderr(在bash中)'python myscript.py 2>&1> out.log' – cobbal 2010-04-09 05:18:02
您也可以使用StringIO
模塊,而不是滾動自己的stdout流。有時候,標準輸出需要多於一個write
方法(flush
是另一種常見的方法),該方法將由StringIO處理。
import StringIO
import sys
sys.stdout = StringIO.StringIO()
你能提供更多的信息嗎?你在說什麼腳本?打印什麼樣的數據?你能顯示一些代碼嗎?你在使用外部腳本嗎? – Ikke 2010-04-09 04:43:06