Python | 执行shell 命令的几种方法

本文总结使用 shell 脚本的几种方法。

Updated: 2022 / 7 / 27

Python 作为一门脚本语言,有时候需要与 shell 命令交互式使用,在 Python 中提供了很多的方法可以调用并执行 shell 脚本,本文做一个简单的总结 。

本文的开发环境是 macOS Big Sur

  • os.system('command')
    这是 python 自带的执行 shell 命令的方法,其中最后一个 0 是这个命令的返回值,为 0 表示命令执行成功。
    但是使用 system() 无法将执行的结果保存起来,如下所示:
print(os.system("touch a.txt"))

print(os.system("ls -lh"))

  • os.popen('command')
    通过 os.popen() 返回的是一个文件对象,对其进行读取 read() 的操作可以看到执行的输出。
f = os.popen("ls -l")

print(f.read())

f = os.popen("touch b.txt")

print(f.read())

Subprocess

subprocess 模块是 python2.4 版本开始引入的模块,也是系统自带的,不需要再额外安装了。

主要用来取代一些旧的模块方法,如 os.systemos.spawn*os.popen*commands.* 等。

subprocess 通过子进程来执行外部指令,并通过 input / output / error 管道,获取子进程的执行的返回信息。

执行命令,并返回执行状态。其中,

  • shell 参数为 False 时,命令以及命令的参数需要通过列表的方式传入;
print(subprocess.call(["ls", "-l"], shell=False))

print(subprocess.call(["touch", "c.txt"], shell=False))

  • shell 参数为 True 时,可通过一个字符串直接传入命令以及命令所需要的参数;
print(subprocess.call(("ls -l"), shell=True)

print(subprocess.call(["mkdir newdir1"], shell=True))

a = subprocess.check_output(["ls","-l"], shell=False)
print(a)

subprocess 的功能还有更多,比如还有 Popen 类。

subprocess 模块中定义了一个 Popen 类,通过它可以来创建进程,并与其进行复杂的交互。

首先安装 sh 库, pip install sh

Python 是一种伟大的脚本语言,不过有时使用标准 ossubprocess 库会有点棘手。

sh 库提供了一种不错的替代方案。 sh 库: http://amoffat.github.io/sh/

库允许用户像使用普通函数一样调用任意程序,这对自动化工作流和任务非常有用。

它的一般工作模式如下:

sh.command_name("参数一", "参数二", "参数三")

如下,

print(sh.pwd())

sh.mkdir('FolderA')

sh.touch('File.txt')

print(sh.whoami())

print(sh.echo('This is great!'))

sh.ls("-l")

print(sh.ls("-l"))

sh.df("-h")

print(sh.df("-h"))

sh.du("-h", "-d 1")

print(sh.du("-h", "-d 1"))

注意:上面在通过 sh.** 编写的时候可能没有代码提示,因为 sh 模块里面并没有直接定义像上面的 pwd()touch()du() 等这些函数,他是通过其他的方式实现的,所以没有智能敏感提示。

Original: https://blog.csdn.net/MissMango0820/article/details/126021826
Author: MissMango0820
Title: Python | 执行shell 命令的几种方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/673556/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球