权限,Python脚本

权限,Python脚本,python,Python,我正在学习为工作编写Python脚本,我遇到了一些问题。脚本应该读取文件,并将权限打印到电子邮件中。我的问题是,当它试图调用permission()方法时,我遇到了一个错误,我不知道如何修复它 Python代码 import smtplib import os import stat result = "" def permission(file): s = os.stat(file) mode = s.st_mode if(stat.S_IR

我正在学习为工作编写Python脚本,我遇到了一些问题。脚本应该读取文件,并将权限打印到电子邮件中。我的问题是,当它试图调用permission()方法时,我遇到了一个错误,我不知道如何修复它

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@yahoo.com'
gmail_user = 'email@gmail.com'
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
回溯(最近一次呼叫最后一次):
文件“lastpart.py”,第83行,在
值=权限(文件)
权限中第15行的文件“lastpart.py”
s=os.stat(文件)
TypeError:强制使用Unicode:需要字符串或缓冲区,找到类型

通过将实际文件名传递给函数,而不是
文件的内置类型来修复它。

通过将实际文件名传递给函数,而不是
文件的内置类型来修复它。

>
>>> file
<type 'file'>
将变量命名为非
文件
,并实际向其传递文件名。您从未真正定义要传递给函数调用的内容,因此它不会因未定义的变量错误而崩溃的唯一原因是Python碰巧已经定义了具有该名称的内置文件。

>

将变量命名为非
文件
,并实际向其传递文件名。您从未真正定义要传递给函数调用的内容,因此它不会因未定义的变量错误而崩溃的唯一原因是Python碰巧已经定义了具有该名称的内置内容。

是否尝试重命名函数的参数
file
已经是一个类型名了,很明显,python也被名为
file
的参数弄糊涂了。@Ulrich:不,python可以让它们保持清晰。但是询问者无法。是否尝试重命名函数的参数
file
已经是一个类型名了,很明显,python也被名为
file
的参数弄糊涂了。@Ulrich:不,python可以让它们保持清晰。但是询问者不能。