2022年 11月 8日

常用python执行shell的命令

一、os.system(“pwd”)

1.

  • 返回值依赖于系统,程序阻塞等待返回
  • 直接返回系统的调用返回值
  • windows、Linux下是不一样的

2.样例

在这里插入图片描述

二、os.popen(command[, mode[, bufize]])

1. 执行后的结果是个字符串

2. 使用

import os
result = os.popen("pwd").read()
  • 1
  • 2

3.样例

在这里插入图片描述

三、commands模块(Python2中的模块)

1. 有以下三个函数:

函数 说明 备注
getoutput(cmd) Return output (stdout or stderr) of executing cmd in a shell. 返回字符串
getstatus(file) Return output of “ls -ld file” in a string. 已被丢弃,不建议使用
getstatusoutput(cmd) Return (status, output) of executing cmd in a shell. 返回一个元祖

2. 使用

import commands
a, b = commands.getstatusoutput("pwd")
a是退出的结果,b是输出的结果
  • 1
  • 2
  • 3

3.样例

在这里插入图片描述

  • python 3.0 之后移除此命令,使用 subprocess代替

四、 subprocess模块

  • subprocess 模块启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。

. 样例

1. subprocess.run()

  • subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)
    在这里插入图片描述

2. Popen()

subprocess的核心,子进程的创建和管理都靠它处理。

1)subprocess.Popen(command, shell=True)

  • command是bash命令时,shell必须为True,在shell下执行command命令
  • 当command是可执行文件时,shell可任意

2)Popen对象的方法

  • poll():
    • 检查进程是否终止,如果终止返回 returncode,否则返回 None。 wait(timeout): 等待子进程终止。
  • communicate(input,timeout):
    • 和子进程交互,发送和读取数据
  • send_signal(singnal):
    • 发送信号到子进程 。
  • terminate():
    • 停止子进程,也就是发送SIGTERM信号到子进程。
  • kill():
    • 杀死子进程。发送SIGKILL 信号到子进程。

3)构造函数:

  • class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None,
    preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False,
    startupinfo=None, creationflags=0,restore_signals=True, start_new_session=False, pass_fds=(),
    *, encoding=None, errors=None)

4)样例:

  • 创建一个子进程,然后执行一个简单命令
    在这里插入图片描述