4

だから私はpy2appを使って.appにバンドルされているpythonアプリケーションを持っています。ターミナルでコードを実行している場合、通常は標準出力に出力されるデバッグ用の印刷ステートメントがいくつかあります。バンドルされた .app を開くだけでは、明らかにこの出力は表示されません。見えなくても、実際にどこかに印刷されているものはありますか?

4

3 に答える 3

5

stdout および stderr ストリームがリダイレクトされる場所は、アプリケーションの実行方法と、使用している OSX リリースによって異なります。

ターミナル ("MyApp.app/Contents/MacOS/MyApp") からアプリケーションを実行すると、出力はターミナル ウィンドウに表示されます。

ダブルクリックまたは open(1) コマンドを使用してアプリケーションを実行すると、10.8 より前の OSX を使用している場合、出力は Console.app で終了し、OSX 10.8 では破棄されます。

OSX 10.8 でも Console.app が読み取るログに出力をリダイレクトするパッチがありますが、現時点ではリリースされたバージョンではありません。

PS 私は py2app のメンテナーです。

于 2013-07-10T09:03:10.813 に答える
0

loggingという名前のモジュールを見てみたいと思うかもしれません

このモジュールを使用して、独自のログを別のファイルに書き込むことができます。たとえば、それが私がこれを行う方法です。

import logging

# Create a log file for the future debug
LOG_FILE_NAME = 'my-script.log'
log_path = path = os.path.join(os.path.expanduser('~'), '/mnt/logs/') 
if not os.path.exists(log_path):
    os.makedirs(log_path)
logger = logging.getLogger('my-script')
logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler(log_path+LOG_FILE_NAME)
file_handler.setLevel(logging.DEBUG)
file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(message)s')
file_handler.setFormatter(file_formatter)
logger.addHandler(file_handler)

class Foo()

    def log(self, msg, level=None):
        print "LOG %s" % msg
        if level is not None:
            if level == 'INFO':
                logger.info(msg)
            elif level == 'WARNING':
                logger.warn(msg)
            elif level == 'ERROR':
                logger.error(msg)
            elif level == 'CRITICAL':
                logger.critical(msg)
        else:
            logger.debug(msg) # DEBUG

    self.log('Some text here', 'DEBUG') # I use self.log instead of print
于 2013-07-09T16:19:50.593 に答える