📜  如何在 python 中导入子进程(1)

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

如何在 Python 中导入子进程

在 Python 中,我们可以使用内置的 subprocess 模块来启动子进程。这个模块提供了一种与操作系统的交互方式,允许你执行外部程序并与其进行交互。

同步执行子进程

要同步执行子进程,可以使用 subprocess.call() 函数。该函数会启动子进程并等待其执行完毕,然后返回子进程的退出代码。以下是示例代码:

import subprocess

# 执行一个命令
subprocess.call(["ls", "-l"])

在上面的代码中,我们使用 subprocess.call() 函数来执行 ls -l 命令。调用该函数会等待命令执行完成,然后返回子进程的退出代码。

异步执行子进程

如果你需要与子进程进行交互,那么可以使用 subprocess.Popen() 函数来启动子进程。该函数不会等待子进程执行完成,而是立即返回 Popen 对象。以下是示例代码:

import subprocess

# 启动一个子进程
proc = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)

# 从子进程读取输出
output = proc.stdout.read()

# 等待子进程执行完毕
proc.wait()

# 打印子进程输出
print(output)

在上面的代码中,我们使用 subprocess.Popen() 函数来启动一个子进程,并使用 stdout=subprocess.PIPE 参数将其输出重定向到管道。然后,我们使用 proc.stdout.read() 方法从管道中读取子进程的输出。最后,我们使用 proc.wait() 方法等待子进程执行完毕,并打印子进程的输出。

传递命令行参数

如果你需要传递命令行参数给子进程,可以将它们作为列表传递给 subprocess.call()subprocess.Popen() 函数。例如:

import subprocess

# 传递命令行参数给子进程
subprocess.call(["echo", "Hello", "World"])

上面的代码会执行 echo Hello World 命令,并将其输出打印到终端。

使用 shell 执行命令

如果你需要使用 shell 执行命令,可以将 shell=True 参数传递给 subprocess.call()subprocess.Popen() 函数。例如:

import subprocess

# 使用 shell 执行命令
subprocess.call("cat /etc/passwd | grep root", shell=True)

上面的代码会使用 shell 执行 cat /etc/passwd | grep root 命令,并将其输出打印到终端。

错误处理

当子进程执行出错时,subprocess.call() 函数会抛出 CalledProcessError 异常,而 subprocess.Popen() 函数会返回一个非零的退出代码。你可以在代码中添加异常处理来处理这些情况。例如:

import subprocess

try:
    # 执行命令并捕获异常
    subprocess.check_call(["ls", "/no/such/directory"])
except subprocess.CalledProcessError as e:
    # 处理 CalledProcessError 异常
    print("Command failed with return code", e.returncode)

上面的代码会尝试执行 ls /no/such/directory 命令,并捕获 CalledProcessError 异常。如果命令执行失败,就会打印错误消息。