python和shell常用基本命令的对应关系
平时工作的过程中,我个人习惯用python写后端的逻辑,然后使用shell写一些Linux环境下面的脚本,对于python脚本的使用,其实还是比较少的,最近在尝试逼迫自己使用python来写脚本,一开始的时候,还真的是有点不太适应,这两天慢慢的摸到一些门道,其实python脚本的写法和后端逻辑的写法差不多。
今天的内容就说说shell命令在python脚本中是怎么对应的实现的。这里列举一些例子,大家可以对比一下:
1、获取当前目录,相当于shell中的pwd命令
>>> os.getcwd()
'/private/var/root'
2、改变当前脚本目录,相当于shell中的cd命令
>>> os.chdir('/tmp/')
>>> os.getcwd()
'/private/tmp'
3、创建目录,相当于shell中的mkdir -p命令,我们可以看到当我们创建了目录之后,就可以直接使用chdir切换到刚才的目录下面了。
>>> os.makedirs('/tmp/yeyz/test')
>>> os.chdir('/tmp/yeyz/test')
>>> os.getcwd()
'/private/tmp/yeyz/test'
当然,还有一个os.mkdir()的命令,这个命令相当于shell中没有使用-p参数时候的情况,如果该目录存在,则无法创建成功。
4、递归删除,相当于rm -rf 命令
>>> os.removedirs('/tmp/yeyz/test')
>>> os.chdir('/tmp/yeyz/test')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: '/tmp/yeyz/test'
>>> os.chdir('/tmp/yeyz/')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: '/tmp/yeyz/'
>>> os.chdir('/tmp/')
>>> os.getcwd()
'/private/tmp'
我们可以看到,当我们删除掉之后,再想进入之前的目录,就会报错了。
5、列举当前目录下的所有文件,类似于shell中的ls命令
>>> os.listdir('.')
['.keystone_install_lock', 'com.apple.launchd.Haenu0YBGr', 'com.google.Keystone', 'powerlog', 'KSDownloadAction.kArMUqmIGL', 'KSInstallAction.XG3CXseysP', 'com.apple.launchd.ImXO2x8tjW', 'com.sogou.inputmethod', 'KSOutOfProcessFetcher.u4BE7MILoK']
可以看到,返回的值是一个list,拿到这个list之后,我们可以使用代码对它进行循环,然后依次进行处理
6、当然,我们可以使用os.system直接执行shell命令,如下的方法,我们使用system的方法直接执行pwd命令,和我们使用getcwd的方法的结果是一样的。
>>> os.system('pwd')
/private/tmp
0
>>> os.getcwd()
'/private/tmp'
大家可能还注意到了,返回了一个多余的0,它的意思是该命令执行成功,如果执行不成功,则会返回一个错误的code
>>> os.system('pwdddd')
sh: pwdddd: command not found
32512
7、文件名称改动,类似于shell中的mv 操作
>>> os.system('touch aaa.txt')
0
>>> os.system('ls')
aaa.txt powerlog
0
>>> os.system('pwd')
/private/tmp
0
>>> os.rename('aaa.txt','bbb.txt')
>>> os.system('ls')
bbb.txt powerlog
0
8、将目录和文件拆分成一个二元组,os.psth.split
>>> path = os.getcwd()
>>> print(os.path.split(path))
('/private', 'tmp')
这个功能还是很实用的,如果你的目录是个文件,就可以很方便的拿到这个文件的上级目录
os.path还有其他的一些函数,例如:
os.path.exists()方法可以判断当前的目录是否存在,
os.path.dirname()方法,其实就是split方法的第一个元素
os.path.isfile()方法,可以判断路径是否是一个文件
os.path.isdir()方法,可以判断给的路径是否是一个文件夹
9、sys.exit(n)方法,相当于shell中异常退出的exit 1命令
在Python中,正常退出可以不用写代码,执行完毕退出的时候,exit的值就是0,当遇到异常的时候,就可以使用sys.exit(1)的方法告诉程序当前执行过程中出现了问题。