2012-02-15 10 views
0

私は仕事のためにPythonスクリプトを書くことを学んでおり、私はいくつかの問題にぶつかってきました。スクリプトはファイルを読み込み、そのアクセス許可を電子メールに出力することになっています。私の問題は、permission()メソッドを呼び出そうとしたときにエラーが発生していて、それを修正する方法がわかりません。パーミッション、Pythonスクリプト

Pythonのコード

import smtplib 
import os 
import stat 

result = "" 
def permission(file): 
     s = os.stat(file) 
     mode = s.st_mode 

     if(stat.S_IRUSR & mode): 
      ownerRead = 1 
      result += ownerRead 
     else: 
      ownerRead = 0 
      result += ownerRead 
     if(stat.S_IWUSR & mode): 
      ownerWrite = 1 
      result += ownerWrite 
     else: 
      ownerWrite = 0 
      result += ownerWrite 
     if(stat.S_IXUSR & mode): 
      ownerExecute = 1 
      result += ownerExecute 
     else: 
      ownerExecute = 0 
      result += ownerExecute 
     if(stat.S_IRGRP & mode): 
      groupRead = 1 
      result += groupRead 
     else: 
      groupRead = 0 
      result += groupRead 
     if(stat.S_IWGRP & mode): 
      groupWrite = 1 
      result += groupWrite 
     else: 
      groupWrite = 0 
      result += groupWrite 
     if(stat.S_IXGRP & mode): 
      groupExecute = 1 
      result += groupExecute 
     else: 
      groupExecute = 0 
      result += groupExecute 
     if(stat.S_IROTH & mode): 
      otherRead = 1 
      result += otherRead 
     else: 
      otherRead = 0 
      result += otherRead 
     if(stat.S_IWOTH & mode): 
      otherWrite = 1 
      result += otherWrite 
     else: 
      otherWrite = 0 
      result += otherWrite 
     if(stat.S_IXOTH & mode): 
      otherExecute = 1 
      result += otherExecute 
     else: 
      otherExecute = 0 
      result += otherExecute 
     return result 
to = '[email protected]' 
gmail_user = '[email protected]' 
gmail_pwd = 'pwd' 
smtpserver = smtplib.SMTP("smtp.gmail.com",587) 
smtpserver.ehlo() 
smtpserver.starttls() 
smtpserver.ehlo 
smtpserver.login(gmail_user, gmail_pwd) 
header = 'To:' + to + '\n' + 'From: ' + gmail_user + '\n' + 'Subject:permissions \n' 
print header 
values = permission(file) 
print values 
msg = header + values 
smtpserver.sendmail(gmail_user, to, msg) 
print 'done!' 
smtpserver.close() 

エラー出力は

Traceback (most recent call last): 
    File "lastpart.py", line 83, in <module> 
    values = permission(file) 
    File "lastpart.py", line 15, in permission 
    s = os.stat(file) 
TypeError: coercing to Unicode: need string or buffer, type found 
+0

あなたの関数のパラメータの名前を変更してみてください。 'file'は既に型名ですが、明らかに、' file'という名前のパラメータを持つことによって、pythonは混乱しています。 –

+1

@Ulrich:いいえ、Pythonはそれらをまっすぐに保つことができます。しかし、尋問者はできません。 –

答えて

3

あなたは機能ではなく、組み込み型fileに実際のファイル名を渡すことによってそれを修正します。

2
>>> file 
<type 'file'> 

変数にはfile以外の名前を付け、実際にファイル名を渡します。あなたは関数の呼び出しに渡すものを実際に決めることは決してありません。したがって、未定義の変数エラーでクラッシュしていない唯一の理由は、Pythonが既に組み込みの名前で何かを定義しているからです。