程序媛筆記分享——python模塊之subprocess模塊

2021-01-07 PythonStar

subprocess模塊:專門用於py執行系統命令

1. 簡單命令的執行

# !usr/bin/env python

# -*- coding:utf-8 -*-

import subprocess

# subprocess模塊中,多個指令的輸入,由參數shell決定輸入形式是字符串還是序列,如下:

# ret = subprocess.call(["ls", "-l"], shell=False)

# ret = subprocess.call("ls -l", shell=True)

# 需注意,以上命令需要在linux系統下運行

# call執行命令,返回狀態碼

re1 = subprocess.call('ipconfig')

print(re1)

# check_all執行命令,如果執行狀態碼是 0 ,則返回0,否則拋異常

re2 = subprocess.check_call('ipconfig')

print(re2)

# check_output執行命令,如果狀態碼是 0 ,則返回執行結果,否則拋異常

re3 = subprocess.check_output('ipconfig')

print(re3)

2. 複雜命令的執行

現在有很多人都想學python,但是直接看教程又有點太難下手。

之前有幾個朋友都問我能不能指導他們一下入門學這個語言,於是我就弄了個零基礎免費學習python的群,每天講一點內容(145010486),提供免費的學習資料還有答疑。如果有0基礎想入門的新手,不如來跟著看看,歡迎加入我們共同學習的隊伍。

a.參數:

args:shell命令,可以是字符串或者序列類型(如:list,元組)

bufsize:指定緩衝。0 無緩衝,1 行緩衝,其他 緩衝區大小,負值 系統緩衝

stdin, stdout, stderr:分別表示程序的標準輸入、輸出、錯誤句柄

preexec_fn:只在Unix平臺下有效,用於指定一個可執行對象(callable object),它將在子進程運行之前被調用

close_sfs:在windows平臺下,如果close_fds被設置為True,則新創建的子進程將不會繼承父進程的輸入、輸出、錯誤管道。

所以不能將close_fds設置為True同時重定向子進程的標準輸入、輸出與錯誤(stdin, stdout, stderr)。

shell:同上

cwd:用於設置子進程的當前目錄

env:用於指定子進程的環境變量。如果env = None,子進程的環境變量將從父進程中繼承。

universal_newlines:不同系統的換行符不同,True -> 同意使用

startupinfo與createionflags只在windows下有效

將被傳遞給底層的CreateProcess()函數,用於設置子進程的一些屬性,如:主窗口的外觀,進程的優先級等等

b.執行普通命令:

import subprocess

ret1 = subprocess.Popen(["mkdir","t1"]) # 此命令在linux中才能運行

ret2 = subprocess.Popen("mkdir t2", shell=True)

c.執行複雜命令的四種用法:

對了,作者建了個小群,有興趣的親們可以入群一起聊天,學習,交流:145 010 486

###終端輸入命令分為兩種:輸入即可得到輸出,eg:ipconfig;輸入進行某環境,依賴再輸入,如:python###

第一種

import subprocess

obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)

# cwd:在創建目錄前,先跳轉到指定目錄,再創建目錄

第二種

:最基本的

import subprocess

# 執行python,並指定三個管道。universal_newlines:新行換行符

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE,

stderr=subprocess.PIPE, universal_newlines=True)

print(cmd_out)

print(cmd_error)

第三種

:常用的

import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE,

stderr=subprocess.PIPE, universal_newlines=True)

out_error_list = obj.communicate() # communicate()讀取輸出和錯誤全部結果

print(out_error_list)

第四種:對於單條命令可簡化

import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE,

stderr=subprocess.PIPE, universal_newlines=True)

out_error_list = obj.communicate('print("hello")')

print(out_error_list)

相關焦點

  • Python 中的 Subprocess 模塊
    我們能從Python官方文檔裡讀到應該用subprocess 模塊來運行系統命令。subprocess模塊允許我們創建子進程,連接他們的輸入/輸出/錯誤管道,還有獲得返回值。subprocess模塊打算來替代幾個過時的模塊和函數,比如: os.system, os.spawn*, os.popen*, popen2.*命令。
  • 每周一個 Python 模塊|subprocess
    subprocess 模塊主要用於創建子進程,並連接它們的輸入、輸出和錯誤管道,獲取它們的返回狀態。通俗地說就是通過這個模塊,你可以在 Python 的代碼裡執行作業系統級別的命令,比如ipconfig、du -sh等。subprocess 模塊替代了一些老的模塊和函數,比如:os.system、os.spawn*等。
  • Python模塊學習:subprocess模塊
    subprocess模塊,最簡單的用法就是調用shell命令或者程序,並且可以通過stdout,stdin和stderr進行交互。根據官方文檔給出的說明:此模塊允許您生成進程,連接到它們input/output/error管道,並獲取其返回代碼。這個模塊打算替換幾個較舊的模塊和功能:os.system、os.spawn、os.popen、popen2.
  • Python學習筆記:模塊和包
    模塊就是python程序,任何python程序都可作為模塊導入。對於任何程序,只要導入了模塊,即可使用該模塊內的所有成員。希望實現的效果:如果直接使用python命令運行該模塊(相當於測試),程序應該執行該模塊的測試函數;如果是其他程序導入該模塊,程序不應該執行該模塊的測試函數。此時可藉助於所有模塊內置的name__變量進行區分,如果直接使用Python命令來運行一個模塊,_name_變量的值為_main_;如果該模塊導入被導入其他程序中,_name_變量的值就是模塊名。
  • 推薦|Python 正則表達式 re 模塊簡明筆記
    re 模塊在 Python 中,我們可以使用內置的 re 模塊來使用正則表達式。有一點需要特別注意的是,正則表達式使用 \ 對特殊字符進行轉義,比如,為了匹配字符串 『python.org』,我們需要使用正則表達式 'python\.org',而 Python 的字符串本身也用 \ 轉義,所以上面的正則表達式在 Python 中應該寫成 'python\\.org',這會很容易陷入 \ 的困擾中,因此,我們建議使用 Python 的原始字符串,只需加一個 r 前綴
  • 【python】os 模塊使用筆記
    Python內置的os模塊可以調用作業系統提供的接口函數,對文件或目錄進行操作(實際上作業系統是不允許應用程式直接訪問和操作文件和目錄的,讀寫文件就是請求作業系統打開一個文件對象,通常稱為文件描述符。幸運的是shutil模塊提供了copyfile()的函數,你還可以在shutil模塊中找到很多實用函數,它們可以看做是os模塊的補充。
  • 徹底明白os.system、os.popen、subprocess.popen的用法和區別
    該模塊是在2.4版本中新增的,官方文檔描述可以用來替換以下函數:os.system、os.spawn、os.popen、popen2,它的目的是啟動一個新進程並且與之進行通信,最常用的定義是使用類Popen(), 它可以創建進程,並且與進程進行複雜的交互,一個比較明顯的缺點是它是一個阻塞的方法,如果運行的CMD命令時產生的內容非常多,函數就是會非常容易阻塞,另外一點
  • Python random模塊學習筆記
    來自:標點符的《Python random模塊學習筆記》連結:http://www.biaodianfu.com
  • python執行系統命令
    , **kwargs) as process: File "/usr/lib/python3.5/subprocess.py", line 947, in __init__ restore_signals, start_new_session) File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
  • Python之re模塊方法詳解(正則表達式)
    學習re模塊首先要對python正則表達式要了解,正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配
  • python的模塊和序列
    前言概要本章節主要講述python中的模塊和序列的概念以及如何使用模塊和序列化方面的知識。模塊的概念在python中有個關鍵詞是import,代表的是導入、加載的意思。>包含一組模塊的包(package)在一些常見的場景裡,我們所描述的模塊 其實就是一個包含python定義和聲明的py文件,文件名就是模塊名字加上.py的後綴。
  • Python導入模塊的幾種姿勢
    (點擊上方快速關注並設置為星標,一起學Python)來源:編程派    連結:http://codingpy.com/article/pyth
  • Python之os模塊
    Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。
  • 加速程序開發 Python整合C語言模塊
    因此,本文通過實例研究如何在Python程序中整合既有的C語言模塊,包括用C語言編寫的源程序和動態連結庫等,從而充分發揮Python語言和C語言各自的優勢。Python語言的特點Python作為一門程序開發語言,被越來越多地運用到快速程序開發。
  • 萬字長文詳解Python正則表達式及re模塊
    exp) 零寬度負回顧後發斷言,來斷言此位置的前面不能匹配表達式exp,Python中提供的re模塊使Python擁有全部正則表達式的功能!))  # None開局導入re模塊,r""表示為一個正則表達式,因為string2中間出現了一個數字5 所以不匹配!
  • python之Argparse模塊
    argparse 模塊可以輕鬆編寫用戶友好的命令行接口。
  • python 安全之 urllib 模塊
    urllib 庫是 python
  • Python黑客學習筆記:從HelloWorld到編寫PoC(上)
    使用Python模塊(Modules)可以用更少的代碼來實現更複雜的功能,Python有許多內置的模塊(os,subprocess,socket,urllib,httplib,re,sys等),並且Python可以使用更多的第三方模塊(cymruwhois,scapy,dpkt,spider等)。
  • python教程之七模塊與函數庫
    模塊上一章,我們講解了函數的概念及其使用方法和案例等,我們定義了函數後,可以多次調用該函數來使用,但是如果我們從python解釋器退出後,這些函數信息就都無效了,為此,我們本章提供了模塊這個概念。我們把這些定義存放在文件裡,保存在磁碟裡,這個文件被稱為模塊。模塊是包含所有我們定義的函數和變量的文件,可以被別的程序引入,用來使用模塊裡面的信息。
  • python中的模塊詳解
    概念python中的模塊是什麼?簡而言之,在python中,一個文件(以「.py」為後綴名的文件)就叫做一個模塊,每一個模塊在python裡都被看做是一個獨立的文件。模塊可以被項目中的其他模塊、一些腳本甚至是交互式的解析器所使用,它可以被其他程序引用,從而使用該模塊裡的函數等功能,使用Python中的標準庫也是採用這種方法。分類在Python中模塊分為以下幾種:系統內置模塊,例如:sys、time、json模塊等等;自定義模塊,自定義模塊是自己寫的模塊,對某段邏輯或某些函數進行封裝後供其他函數調用。