2016-09-12 16 views
0
import datetime 
import os 
import sys 
import time 

if "ZLOG_FILE" not in globals(): 
    global ZLOG_FILE 
    script_dir = os.path.realpath(sys.argv[0]).replace(sys.argv[0], "") 
    ZLOG_FILE = os.path.join(script_dir, "log", datetime.datetime.fromtimestamp(time.time()).strftime("%m-%d-%Y %H:%M:%S")) 
    with open(ZLOG_FILE, "w"): 
     pass 

def log(level, msg): 
    with open(ZLOG_FILE, "a") as f: 

     # Fix colors 
     if level == "INFO": 
      msg = "ESC[37m[INFO] " + msg 

     elif level == "WARN": 
      msg = "ESC[33m[WARN] " + msg 

     elif level == "ERROR": 
      msg = "ESC[31m[ERROR] " + msg 

     if level != "ERROR": 
      print(msg) 
     else: 
      sys.stderr.write(msg) 
     f.write(msg) 

最初のインポート時に、実行中のメインスクリプトと同じ場所にあるログディレクトリに現在の時刻と日付を持つ新しいファイルを作成する、このシンプルなロギングライブラリを作成しました。しかし、次のエラーが表示されます。無効な引数ウィンドウを開いたままのPython

Traceback (most recent call last):            
    File "test.py", line 1, in <module>           
    import zlog                 
    File "C:\Users\zane\Desktop\zlog.py", line 10, in <module>      
    with open(ZLOG_FILE, "w"):             
OSError: [Errno 22] Invalid argument: 'C:\\Users\\zane\\Desktop\\log\\09-12-2016 
20:02:26'                  

私は間違っていますか?

EDIT:script_dir変数を使用してスクリプト名を削除し、if文で書式を修正しました。

+0

にあったディレクトリを得た後、私はパスからメインスクリプトを削除するのを忘れてもイムはまだエラーを取得しますディレクトリではないでしょう。 (それはエラーメッセージのすぐそこにありますが、どのようにそれを見逃すことができますか?) –

+0

あなたのERRORロジックは意味をなさない。 "レベルがエラーならば、もしレベルがエラーでないならば?" – Soviut

+0

'log'サブディレクトリは存在しますか?そうでない場合は、作成する必要があります。 'open()'は欠けているサブディレクトリを自動的に作成しません。 –

答えて

0

Windowsがファイル名にコロンを使用しカント、と私はそれがあなたのように `test.py`を治療している

+0

あなたのシステムドライブはおそらくNTFSです。そのためコロンは ':stream_name:stream_typeの形式の[ファイルストリーム](https://msdn.microsoft.com/en-us/library/aa364404)を指定するために予約されています'。 NTFSファイルを開くと、実際には匿名データストリーム、つまり ':: $ DATA'が開かれています。 NTFSディレクトリを開くと、実際には$ I30インデックスストリーム、つまり ':$ I30:$ INDEX_ALLOCATION'が開きます。ディレクトリは '$ DATA'ストリームに名前をつけることもできます。この場合、ストリームタイプ "26"が未知の "02"というストリームを作成しようとするため、 "09-12-2016 20:02:26"は無効です。 – eryksun

関連する問題