2016-10-16 28 views
0

我對python非常陌生,並且有一個腳本在電子郵件發送到服務器時運行。我的問題是試圖調試腳本。我如何將任何錯誤推送到日誌文件?python如何通過記錄問題來調試錯誤

下面是腳本:

#!/usr/bin/python 
import sys, email 

email_input = email.message_from_string(sys.stdin.read()) 
directory = "/home/someuser/files" 


counter = 1 
for part in email_input.walk(): 
    # multipart/* are just containers 
    if part.get_content_maintype() == 'multipart': 
     continue 
    # Applications should really sanitize the given filename so that an 
    # email message can't be used to overwrite important files 
    filename = part.get_filename() 
    if not filename: 
     ext = mimetypes.guess_extension(part.get_content_type()) 
     if not ext: 
      # Use a generic bag-of-bits extension 
      ext = '.bin' 
     filename = 'part-%03d%s' % (counter, ext) 
    counter += 1 
    fp = open(os.path.join(directory, filename), 'wb') 
    fp.write(part.get_payload(decode=True)) 
    fp.close() 
+0

HTTPS:/ /docs.python.org/2/howto/logging.html#logging-howto – wwii

回答

0

至少有幾種方法可以做到這一點:

  1. 您可以打印到stdout並重定向到一個文件中。下面是一個例子

    ➜〜蟒print_this.py &> log.txt的

    ➜〜貓的log.txt

    此消息

    ➜〜貓print_this.py

    打印(「此消息」)

  2. 您可以使用日誌記錄庫並附加文件處理程序:

https://docs.python.org/2/library/logging.handlers.html#filehandler

這是稍微複雜。但是你可以看到一些代碼,我寫到這裏的一個例子,你可以看到在那裏把處理程序:

https://github.com/nogibjj/sensible/blob/master/sensible/loginit.py

如何添加以此爲例使用打印:

import sys, email 

email_input = email.message_from_string(sys.stdin.read()) 
directory = "/home/someuser/files" 


counter = 1 
for part in email_input.walk(): 
    # multipart/* are just containers 
    if part.get_content_maintype() == 'multipart': 
     print("part: %s Found multipart" % part) 
     continue 
    # Applications should really sanitize the given filename so that an 
    # email message can't be used to overwrite important files 
    filename = part.get_filename() 
    if not filename: 
     ext = mimetypes.guess_extension(part.get_content_type()) 
     if not ext: 
      # Use a generic bag-of-bits extension 
      ext = '.bin' 
     filename = 'part-%03d%s' % (counter, ext) 
    counter += 1 
    fp = open(os.path.join(directory, filename), 'wb') 
    fp.write(part.get_payload(decode=True)) 
    fp.close() 
+0

第一個選項,我會在上面的代碼示例中添加它? – K3NN3TH

+0

回答上述問題 –