前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python写Shell脚本

用Python写Shell脚本

作者头像
菜菜cc
发布2022-11-15 21:23:44
1.4K0
发布2022-11-15 21:23:44
举报
文章被收录于专栏:菜菜的技术博客

Python调用Shell命令

os.system

os.system函数与系统编程中的exec族函数调用一致,创建出子进程后代码段由外部程序替换,不会返回外部程序运行结果

代码语言:javascript
复制
import os

os.system('ls -l')

os.popen

os.popen返回的是一个文件对象,它将外部程序运行结果保存在文件对象中,当调用其read方法时就会得到运行结果。该方法可以得到外部程序的运行结果

代码语言:javascript
复制
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方法直接将外部程序的输出结果作为字符串返回了

代码语言:javascript
复制
import commands

commands.getoutput('ls -l')        # 返回输出结果
commands.getstatusoutput('ls -l')  # 返回(状态码, 输出结果)

subprocess.call

Python3中引入的模块,在Python3中推荐使用该模块。subprocess.call将外部程序的输出结果输出并返回状态码

代码语言:javascript
复制
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 国际许可协议 进行许可。转载请注明出处!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python调用Shell命令
    • os.system
      • os.popen
        • commands.getoutput
          • subprocess.call
          • 文件操作API
            • 创建文件
              • 删除文件
                • 复制文件
                  • 移动文件或重命名
                    • 其他
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档