📜  os 运行 shell 命令 python (1)

📅  最后修改于: 2023-12-03 14:44:58.478000             🧑  作者: Mango

OS 运行 Shell 命令 Python

在 Python 中,可以使用 os 模块来运行 Shell 命令。os 模块提供了大量用于处理文件和目录的函数,在执行 Shell 命令时也非常有用。

在 Python 中运行 Shell 命令

要在 Python 中运行 Shell 命令,可以使用 os.system 函数。这个函数接受一个命令字符串作为参数,然后在一个新的 Shell 中执行命令。

import os

os.system("ls -l")

这个命令将在 Python 中运行 ls -l 命令,并将输出打印到控制台。

输出:

total 16
-rw-r--r--  1 user  staff   808B Dec  1 10:02 README.md
-rw-r--r--@ 1 user  staff    87B Dec  1 10:02 hello.py
获取运行命令的输出

如果需要获取 Shell 命令的输出,可以使用 subprocess 模块中的 run 函数。这个函数可以在子进程中运行 Shell 命令,并捕获其输出。

import subprocess

result = subprocess.run("ls -l", shell=True, capture_output=True, text=True)

print(result.stdout)

这个命令将在 Python 中运行 ls -l 命令,并将输出作为字符串返回。参数 shell=True 告诉 Python 在新的 Shell 中运行命令,参数 capture_output=True 告诉 Python 捕获命令的输出,参数 text=True 告诉 Python 以文本格式返回输出。

输出:

total 16
-rw-r--r--  1 user  staff   808B Dec  1 10:02 README.md
-rw-r--r--@ 1 user  staff    87B Dec  1 10:02 hello.py
运行更复杂的命令

如果要执行更复杂的命令,可以使用 subprocess 模块中的 Popen 函数。这个函数可以在子进程中启动任意命令,并通过管道进行通信。

import subprocess

command = "echo 'hello, world!' | tr '[:lower:]' '[:upper:]'"

p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

output, error = p.communicate()

print(output)

这个命令将在 Python 中运行 echo 'hello, world!' | tr '[:lower:]' '[:upper:]' 命令,并将输出作为字符串返回。参数 shell=True 告诉 Python 在新的 Shell 中运行命令,参数 stdout=subprocess.PIPEstderr=subprocess.PIPE 告诉 Python 将命令的输出重定向到管道中,参数 text=True 告诉 Python 以文本格式返回输出。communicate() 函数将阻塞当前进程,直到子进程运行完毕并返回输出和错误。

输出:

HELLO, WORLD!
处理命令的返回值

运行命令时,可以使用 returncode 属性检查其返回值。返回值为 0 表示命令成功运行,非零则表示命令运行失败。

import subprocess

result = subprocess.run("ls /not/a/dir", shell=True, capture_output=True, text=True)

if result.returncode != 0:
    print(result.stderr)

这个命令将在 Python 中运行 ls /not/a/dir 命令,因为该目录不存在,命令将运行失败。returncode 属性将返回非零值,并将错误消息打印到控制台。

输出:

ls: /not/a/dir: No such file or directory