📜  使用子进程运行多个命令行 (1)

📅  最后修改于: 2023-12-03 15:22:23.622000             🧑  作者: Mango

使用子进程运行多个命令行

有时我们需要在一个脚本中运行多个命令行,这些命令可能需要顺序执行或者是同时执行。为了方便处理这种情况,我们可以使用子进程库来实现运行多个命令行的目的。

Python子进程模块

Python自带了子进程库subprocess,用于在Python代码中启动新进程。我们可以使用子进程库中的Popen方法来启动新进程。这个方法返回一个Popen对象,这个对象可以被用于在进程启动后控制它的输入、输出、错误输出以及退出状态。

下面的代码演示了如何在Python中使用子进程库启动新的进程,并在上一个进程退出后启动下一个进程:

import subprocess

# 启动三个子进程
subprocess.Popen(['ls', '-l'])
subprocess.Popen(['echo', 'start next program'])
subprocess.Popen(['ps', 'aux'])

# 挂起主进程,等待所有子进程退出后结束主程序
subprocess.Popen.communicate()
使用PIPE连接多个进程

子进程库的另一个好处是它可以让我们使用PIPE管道连接多个子进程,实现在多个进程之间的输入输出传递。下面的代码演示了如何使用PIPE连接dir命令和find命令来在Windows环境下查找指定名称的文件:


import sys
import subprocess

# 查找指定名称的文件
filename = 'file.txt'

dir_process = subprocess.Popen(['dir', '/b', '/s'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
find_process = subprocess.Popen(['findstr', filename], stdin=dir_process.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

# 获取结果并输出
output, error = find_process.communicate()
if len(output) > 0:
    print(output.decode())
else:
    print(error.decode())

可以看到,我们首先使用了dir命令来列出目录下的所有文件,然后使用findstr命令来查找指定的文件。在这个过程中,我们使用了PIPE管道连接了两个子进程,从而将第一个命令的标准输出传递给了第二个命令的标准输入。最后,我们输出了第二个命令的执行结果。

总结

子进程库是Python中一个非常强大的库,可以帮助我们在Python脚本中启动新的进程,并可以使用PIPE管道来连接多个进程,实现更加复杂的数据处理操作。如果你需要在Python中运行多个命令行,请务必学会使用子进程库。