Python处理临时文件

tempfile这个模块主要是用来创建临时文件和目录,用完后会自动删除,省的你自己去创建一个文件、使用这个文件、再删除这个过程了。其中比较常用的是TemporaryFile和NamedTemporaryFile。

import tempfile
import os
tmp1 = tempfile.TemporaryFile()   # 创建一个临时文件
type(tmp1)   # tempfile._TemporaryFileWrapper
tmp1.close()    # 关闭后,文件立即删除
tmp2 = tempfile.NamedTemporaryFile(delete=False) # 创建有名字的临时文件,且关闭后不立即删除
tmp2.name    # 'C:\Users\chenw\AppData\Local\Temp\tmpj9whdpr8'
os.path.exists(tmp2.name)   # True
tmp2.write("This is a tmp file!".encode())    # 不接收字符串(str),只能是字节流(bytes)
tmp2.seek(0)    # 调用read()函数前,需要调用seek()函数,指定读取指针的位置,参数是偏移量,0表示从头开始
tmp2.read()    # b'This is a tmp file!'   read()函数的返回值类型依然是bytes,而不是str
tmp2.close()    # 关闭后,文件不立即删除

Python发送邮件

Python提供了标准库smtplib用于发送邮件,整个过程非常简单,不足的地方是密码是明码。

import smtplib
from email.mime.text import MIMEText
#发件人
mail_from = "BioChen.com<admin@biochen.com>"
mail_host = "smtp.exmail.qq.com"
mail_usr = "admin@biochen.com"
mail_pwd = "pass_word"
#收件人
mail_to_addr = "pm.chenwen@qq.com"
#登录服务器
server = smtplib.SMTP(mail_host)
server.login(mail_usr,mail_pwd)
#邮件内容
content = 'this email is a test for python!'
msg = MIMEText(content,_subtype='plain')
msg['Subject'] = 'this email is a test for python!'
msg['From'] = mail_from
msg['To'] = mail_to_addr
#发送邮件
server.sendmail(mail_from, mail_to_addr, msg.as_string())
#关闭服务器
server.close()

网易和腾讯邮箱的SMTP服务器地址:

服务商 发件服务器 端口
网易163邮箱 smtp.163.com 25
网易企业邮 smtp.ym.163.com 25
腾讯QQ邮箱 smtp.qq.com 25
腾讯企业邮 smtp.exmail.qq.com 25

Ubuntu 18.04配置固定IP

Ubuntu 18.04不再使用ifupdown配置网络,而改用netplan。在/etc/network/interfaces配置固定IP是无效的,重启网络的命令services network restrart或/etc/init.d/networking restart也是无效的。
1. 使用ifupdown配置网络
如果要使用之前的方式配置网络,需要重新安装ifupdown:

sudo apt install ifupdown

修改配置文件/etc/network/interfaces:

sudo vim /etc/network/interfaces

配置文件修改如下:

iface ens160 inet static
address 210.72.92.25
gateway 210.72.92.254
netmask 255.255.255.0
dns-nameservers 8.8.8.8

重启网络服务使配置生效

sudo service network restrart

2. 使用netplan配置网络
Ubuntu 18.04使用netplan配置网络,其配置文件是yaml格式的。安装好Ubuntu 18.04之后,在/etc/netplan/目录下默认的配置文件名是50-cloud-init.yaml,我们通过VIM修改它:

sudo vim /etc/netplan/50-cloud-init.yaml

配置文件修改如下:

network:
    ethernets:
        ens160:
            addresses:
                - 210.72.92.28/24 # IP及掩码
            gateway4: 210.72.92.254 # 网关
            nameservers:
                addresses:
                    - 8.8.8.8 # DNS
    version: 2

无论是ifupdown还是netplan,配置的思路都是一致的,在配置文件里面按照规则填入IP、掩码、网关、DNS等信息。注意yaml是层次结构,需要缩进,冒号(:)表示字典,连字符(-)表示列表。
重启网络服务使配置生效:

sudo netplan apply