📅  最后修改于: 2023-12-03 14:44:58.478000             🧑  作者: Mango
在 Python 中,可以使用 os
模块来运行 Shell 命令。os
模块提供了大量用于处理文件和目录的函数,在执行 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.PIPE
和 stderr=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