[python基礎] python與shell交互(一) 簡介

目錄:

1、概述
2、os包
3、subprocess包
4、對比
5、參考文章python


1、概述

python與shell交互的方式有一下幾種:
os.system()
os.popen()
commands包
subprocess包shell

2、os包

  1. os.system([cmd])
    1. 執行CMD,返回CMD的狀態碼(0 - 成功,其餘 - 失敗或被中斷)
    2. 無管道
  2. os.popen([CMD], [mode = 'r' | 'w' ], buffersize)
    1. 開啓子shell執行CMD,返回執行命令的輸入流輸出流文件對象。文件對象可讀寫,但只能進行讀或寫
    2. 底層經過os管道技術 實現
    3. 單向管道(只能讀或寫)
      import os
      #使用讀通道
      f = os.popen("ls -l")# 執行此語句後,將建立子shell運行參數中指定的命令,可是不阻塞父進程
      f.read()# 執行讀取操做時,將阻塞父進程
      #使用寫管道
      #須要提早寫好echo文件
      '''
      #echo.py
      while True:
      in = input()
      if in == "quit" or in == "exit":
      print("Bye")
      break
      print("[-] ", in)
      '''
      f = os.popen("python echo.py", "w")
      f.write("hello")

2、subprocess包

  1. subprocess 模塊經過os 底層的 管道技術 實現
  2. 模塊提出的目標是替代:os.systemos.spawn*
  3. 函數
    1. call(*popenargs, timeout= None, **kwargs)ide

      1. 功能:調用子進程運行命令
      2. 返回值:0 或 非0值
      3. 阻塞父進程,直到該函數結束
      4. 結束條件:命令執行完成或超時
      5. 用於代替 os.system()
      6. 不支持管道
    2. check_call(*popenargs, **kwargs)函數

      1. 功能:檢查在子進程中運行命令的執行狀況
      2. 返回值:0。(命令退出碼爲0時,返回0;不然,無返回值,直接引起CalledProcessError異常)
      3. 阻塞父進程,直到該函數結束
      4. 結束條件: 命令執行完成超時
      5. 不支持管道
    3. check_output(*popenargs, timeout=None, **kwargs)
      1. 功能: 檢查在子進程中運行命令
      2. 返回值: 程序的運行結果。(若是命令返回碼爲0,返回運行結果;不然,直接拋出CalledProcessError異常)
      3. 不阻塞父進程
      4. 不支持stdout的管道
      5. 指定參數:stderr = STDOUT 可捕獲錯誤信息
      6. 支持參數:input
    4. getoutput(cmd)ui

      1. 功能: 獲取子進程中執行命令的輸出結果
      2. 返回值:執行命令的結果
      3. 不阻塞父進程
      4. 不支持管道
      5. 命令執行錯誤時,不引起異常
    5. getstatusoutput(cmd)spa

      1. 功能:獲取子進程中執行命令的返回碼和結果
      2. 返回值:(retcode, stdout)元組
      3. 不阻塞父進程
      4. 不支持管道
      5. 命令執行錯誤時,不引起異常
    6. run(args, *, stdin = None, input = None, stderr = None, shell = False, cwd = None, timeout = None, check = False, encoding = None, errors = None)
      1. 功能:開啓子進程運行命令
      2. 不阻塞父進程
      3. 支持雙向管道
      4. 參數check爲True時,可能會引起異常
      5. run函數是對Popen類封裝後造成的簡單函數
相關文章
相關標籤/搜索