Python调用Shell命令
os.system
os.system
函数与系统编程中的exec族函数调用一致,创建出子进程后代码段由外部程序替换,不会返回外部程序运行结果。
import os
os.system('ls -l')
os.popen
os.popen
返回的是一个文件对象,它将外部程序运行结果保存在文件对象中,当调用其read
方法时就会得到运行结果。该方法可以得到外部程序的运行结果。
import os
os.popen('ls -l').read()
res = os.popen('ls').read()
if 'a.c' in res:
print('a.c in this')
else:
print('a.c not in this')
commands.getoutput
commands模块只能在Python2中使用,Python3将其移除了。commands.getoutput
方法直接将外部程序的输出结果作为字符串返回了。
import commands
commands.getoutput('ls -l') # 返回输出结果
commands.getstatusoutput('ls -l') # 返回(状态码, 输出结果)
subprocess.call
Python3中引入的模块,在Python3中推荐使用该模块。subprocess.call
会将外部程序的输出结果输出并返回状态码。
from subprocess improt call
# 可以将命令和参数以列表的形式传入
code = call(['ls', '-l', '-a'])
# 也可以用字符串作为传入的参数(通过设置参数shell=True)
code = call('ls -l -a', shell=True)
文件操作API
创建文件
代码语言:javascript复制import os
# touch a.c
file = open('a.c', 'w')
file.close()
# mkdir dir
os.mkdir('dir')
# mkdir -p dir1/dir2
os.mkdirs('dir1/dir2')
# ln a.c b.c
os.link('a.c', 'b.c')
# ln -s a.c b.c
os.symlink('a.c', 'b.c')
删除文件
代码语言:javascript复制import os
# rm a.c
os.remove('a.c')
# rm -r dir
os.rmdir('dir')
复制文件
代码语言:javascript复制import shutil
# 参数src为源文件名字,参数dst为目标文件或目录名字
# shutil.copy(src, dst)
# shutil.copy2(src, dst)
# cp a.c b.c
shutil.copy('a.c', 'b.c')
# cp a.c dir/b.c
shutil.copy('a.c', 'dir/')
# cp -p a.c b.c
shutil.copy2('a.c', 'b.c')
# 参数src为源目录名字,dst为目标目录名字
# shutil.copytree(srd, dst)
# cp dir1 dir2 -r
shutil.copytree('dir1', 'dir2')
移动文件或重命名
代码语言:javascript复制import shutil
# shutil.move(src, dst)
# mv a.c b.c
shutil.move('a.c', 'b.c')
其他
代码语言:javascript复制import os
# 切换当前工作目录到/home/ifantsai/下
os.chdir('/home/ifantsai/')
# 返回当前工作目录
work_path = os.getcwd()
# 改变当前进程的根目录为当前目录
os.chroot('./')
# 改变a.c的权限为777
os.chmod('a.c', os.S_IRWXU or os.S_IRWXG or os.S_IRWXO)
# 改变文件的属主
os.chown('a.c', uid, gid)
# 返回b.c这个符号链接所指向的路径
path = os.readlink('b.c')
注: 路径相关操作在
os.path
模块中。命令行参数在sys
模块中,sys.argc
为参数个数,sys.argv
为参数列表,其中sys.argv[0]
为程序本身
本文作者: Ifan Tsai (菜菜)
本文链接: https://cloud.tencent.com/developer/article/2164587
版权声明: 本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!