调用系统命令 / 系统可执行文件
linux和windows都可以
调用windows记事本
import os os.system('notepad.exe')
调用windows cmd
import os os.system('cmd') os.system('powershell')
调用windows的ping命令
import os os.system('ping www.baidu.com')
调用linux 命令
引号中的命令就是我们在terminal中输入的命令
import os os.system('ls -lh')
直接调用可执行文件
import os os.startfile(r'C:/Program Files (x86)/WeChat/WeChat.exe')
远程传输文件 scp
os.system('sshpass -p ***** scp work_dirs/%s/%s xho@172.26.12.84:/home/xx/py/AE_TextSpotter/work_dirs/%s/'%(folder_name, i, folder_name))
sshpass ssh登录在命令行中指定密码
调用sudo,在命令中送入密码
os.system('echo %s | sudo -S %s' % ('******', 'lastb'))
sudo的-S参数 含义是:从标准输入读取密码
管道前输出的密码作为sudo -S 的stdin,从而达到自动输入密码的作用。
注意:-S 是大S 小写s作用不一样
获取命令行的输出 / 获取os.system()的输出
import os console = os.system('echo %s | sudo -S %s' % ('******', 'lastb | head')) r = os.popen(console) for line in r.readlines(): print (line)
但是这个可能遇到报错,遇到的话用subpross
import subprocess cmd = 'echo %s | sudo -S %s' % ('******', 'lastb | head') screenData = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) while True: line = screenData.stdout.readline() print(line.decode('gbk').strip("b'")) if line == b'' or subprocess.Popen.poll(screenData) == 0: screenData.stdout.close() break
os.chdir() 改变当前工作目录到指定的路径
os.getcwd() 获取当前路径
os.path()
Python的相关库和函数_hxxjxw的博客-CSDN博客_python库函数
os.walk() 遍历目录
如果目录里面还有目录还有目录,他会一直递归地遍历下去
import os for i in os.walk('./'): root,dirnames,filenames = i print(i)
os.scandir()
遍历目录,比os.walk()要快 (貌似比os.listdir也快)
import os for i in os.scandir('./'): print(i)
读取环境变量
import os print(os.environ) print(os.environ['MASTER_PORT']) print(os.environ['MASTER_ADDR']) print(os.environ['WORLD_SIZE']) print(os.environ['RANK'])
os与subpross的区别
os操作更简单直接
但是os.system主要问题,就是无法获取shell命令的输出,无法进行输入;也没有超时设置,如果外部命令挂死,会直接导致当前进程挂死