Python subprocess模块常见用法分析
什么是subprocess模块
Python 的 subprocess 模块可以让我们在 Python 操作系统的命令行 Shell 上运行任何外部命令(Bash, Python, Perl, Grep 等)。subprocess 可以取代 os.system() 和 os.spawn*() 方法。
使用subprocess模块的3种方式
1. subprocess.call()
通过 subprocess.call() 方法启动一个外部程序。
举个例子,如下所示:
import subprocess
subprocess.call(["ls", "-l"])
执行结果会直接输出在终端上。
2. subprocess.run()
subprocess.run() 方法用于子进程创建和控制。其输入、输出以及错误的处理都是高度可控且灵活的。
举个例子:
import subprocess
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)
print(result.stdout.decode('utf-8'))
执行结果会在程序中输出。
3. subprocess.Popen()
subprocess.Popen() 方法在 Unix 和 Windows 上都有相同的行为。它启动一个新的进程并为其返回一个 Popen 对象。可以通过该 Popen 对象的方法和属性访问进程的 I/O 管道。
举个例子:
import subprocess
p = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)
print(p.communicate()[0].decode('utf-8'))
执行结果将会输出在终端上。
subprocess模块中一些常用的函数
Os.fork()
os.fork() 是一个 Python 实现 UNIX fork() 函数的接口,它并不直接创建子进程,而是创建了一个与当前 Python 解释器完全一样的进程。这个新的进程只是不同于父进程的 pid。由于调用 os.fork() 会返回所在进程(父进程和子进程)的 pid(0 是子进程,否则则是父进程),因此可以通过判断返回的 pid 的值来确定是父进程还是子进程。如果是子进程,你只需要调用 os.exec*() 函数来运行其他代码。
Os.execv()
os.execv(path, args) 用来执行一个可执行程序,执行参数以数组的方式传递。
import os
# 表示要执行的程序
program = '/bin/ls'
# 表示传给程序 ls 的一个参数。这个参数使 ls 以“标准格式”列出所有文件和目录。
option = '-la'
os.execv(program, [program, option])
总结
到这里,subprocess 模块的常见用法和关键知识点已经详细介绍完毕。它在 Python 系统编程中非常常用和非常重要,大家可以通过上面的示例尝试自己编写并运行一遍。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python subprocess模块常见用法分析 - Python技术站