2012-02-28 10 views
1

私は次のコードを持っています。両方のプラットフォームでログファイルを作成しますが、Windowsログファイルに書き出すだけです。事前Unix/Linuxではlogfileに出力を書き出しませんが、Windowsでは

+2

'os.path.join()' –

+3

なぜ '/'の代わりに '//'を使用していますか? '\\'だけをエスケープする必要があります。 "//"は実際には2つの "/"を意味します。 – mgibsonbr

+0

おそらく 'logging'モジュールが役に立ちます... – Gandaro

答えて

3

import os      

logdir = os.getenv("logs")       
logfile = 'script_list.log' 
path = (raw_input("Enter dir: "))         
if os.name == "posix": 
    log = open("//".join([logdir,logfile]), 'w')       
else: 
    log = open("\\".join([logdir,logfile]), 'w')       
for dirpath, dirname, filenames in os.walk(path):   
    for filename in [f for f in filenames]: 
     if os.name == "posix": 
      log.write(str(dirpath)+ "//" + str(filename) + "\n")  
     else: 
      log.write(str(dirpath)+ "\\" + str(filename) + "\n")  
print '\nYour logfile ' + logdir + '\\' + logfile + ' has been created' 

おかげで私はあなたが、より良い

log=open(os.path.join(logdir, logfile), 'w') 
... 
    for filename in filenames: 
     log.write(os.path.join(dirpath, filename)+'\n') 

かと

if os.name == "posix": 
    log = open("//".join([logdir,logfile]), 'w')      
else : 
    log = open("\\".join([logdir,logfile]), 'w') 
... 
    for filename in [f for f in filenames]: 
     if os.name == "posix": 
      log.write(str(dirpath)+ "//" + str(filename) + "\n")  
     else: 
      log.write(str(dirpath)+ "\\" + str(filename) + "\n")  

を交換使用することをお勧め

logfilename=os.path.join(logdir, logfile) 
log=open(logfilename, 'w') 

... 

print "Your logfile", logfilename, "has been created." 

@Lycha saysとして、ファイルをもう一度閉じてください。だからあなたのコンストラクトは

with open(logfilename, 'w') as log: 
    ... 
+0

パーフェクト、これはソートしました。私は2番目の提案を使いました。夢のように働く。みんなありがとう – geekcomputers

0

は、書き込み後のストリームをフラッシュしてください次のようになります。

log.flush() 

また、(できれのtry-finally節を使用して)最後に、ファイルを閉じる必要があります。

関連する問題