2012-02-15 1 views
0

나는 일을 위해 파이썬 스크립트를 작성하는 것을 배우기 때문에 몇 가지 문제가있다. 스크립트는 파일을 읽고 전자 메일에 사용 권한을 인쇄합니다. 내 문제는 permission() 메서드를 호출하려고 할 때 오류가 발생하며이를 수정하는 방법을 모르겠습니다.퍼미션, 파이썬 스크립트

파이썬 코드

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'이라는 매개 변수를 가짐으로써 혼란스러워지고 있습니다. –

+1

@Ulrich : 아니, 파이썬은 그들을 똑바로 유지할 수 있습니다. 그러나 구경꾼은 할 수 없습니다. –

답변

3

당신은 기능이 아니라 내장 타입 file에 실제 파일 이름을 전달하여 문제를 해결할.

2
>>> file 
<type 'file'> 

변수 이름을 file 이외의 이름으로 지정하고 실제로 파일 이름을 전달하십시오. 파이썬은 이미 내장 된 이름을 가진 무언가를 이미 정의하고 있기 때문에 정의되지 않은 변수 오류로 인해 충돌하지 않는 유일한 이유가 있습니다.