2016-04-24 11 views
0

ロギングモジュールを使用してデータをテキストファイルに出力するPythonプログラムがありますが、問題はテキストファイルへの出力が正常に機能することですPyCharmでスクリプトを実行します(1-10の値はコンソール画面に出力され、Log_Test_File.txtに書き込まれます)。ただし、コマンドラインからスクリプトを実行するとコンソール出力のみが表示されます* .txtファイル)。これはUbuntuまたはRaspberry Piの両方で発生します。Pythonロギングモジュール - コマンドラインから実行するとテキストファイルに出力する

起動時にsudoとして自動的にPiのスクリプトを実行していますが、テキスト出力が正しく動作するようにPiまたはスクリプトを設定する方法はありますか?

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import logging 

logging.basicConfig(filename="Log_Test_File.txt", 
       level=logging.DEBUG, 
       format='%(levelname)s: %(asctime)s %(message)s', 
       datefmt='%m/%d/%Y %I:%M:%S') 

i=0 
while i<10: 
    logging.info("Logging test: {}".format(i)) 
    i+=1 
+0

問題とエラーについて具体的にお答えください。 _ "" ... PyCharmでスクリプトを実行してもうまく動作しますが、コマンドラインからスクリプトを実行するときにはうまく動作しません "_があいまいです。 – ChrisP

答えて

1

提供したコードはうまく動作します。

あなたが適切に作成されたログファイルを見つけることに問題がある場合は、その理由は次のようになります。スクリプトは全く を実行していないログファイルを作成する権限

  • を持っていない

    • 長期実行サービスとしてスクリプトを実行する予定の場合は、明示的なログファイルを作成せずにstdoutにログすることをお勧めします。 stdoutに送信される出力は、スクリプトの実行を制御するプログラム(例えば、supervisord、systemdなど)によって、見やすく、キャプチャし、処理することが容易である。

      syslogに直接ログすることもできますが、プログラムが自分自身で知る必要があるため、プロセスを識別するためにどのような値を使用するかによって複雑になる可能性があります。これはプロセスマネージャにとっては、プログラムよりもずっと簡単です。

  • +0

    応答してくれてありがとう - 私はできるだけロギングモジュールを使用することを好みます(私はDEBUGからINFOへのログのレベルを便利にできるように変更することができます)、アクセス許可の問題の考え方、それを変えるだろうか? – AdamDynamic

    +0

    @AdamDynamic StreamHandlerを使用するだけで標準的なロギングでstdoutまたはstderrにログすることができます。権限の問題については、スクリプトを実行しているユーザがログが書き込まれるファイルを作成できることを確認してください。単純な '$ touch the_log_file.log'で行います。失敗した場合は、 'chown'または' chmod'を使います。 –

    関連する問題