日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python调用系统命令_Python如何调用外部系统命令

發布時間:2025/3/19 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python调用系统命令_Python如何调用外部系统命令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

利用Python調用外部系統命令的方法可以提高編碼效率。調用外部系統命令完成后可以通過獲取命令執行返回結果碼、執行的輸出結果進行進一步的處理。本文主要描述Python常見的調用外部系統命令的方法,包括os.system()、os.popen()、subprocess.Popen()等。

本文分析python調用外部系統命令主要從兩個方面考慮:1、是不是可以返回命令執行結果碼,因為大部分場景都需要通過判斷調用命令是執行成功還是失敗。2、是不是可以獲取命令執行結果。某些場景調用外部命令就是為獲取輸出結果,也可以通過輸出結果來判斷命令執行成功還是失敗。分析結果如下:

下面再針對每一個函數使用方法和實例進行詳細描述。

1、subprocess模塊

優先介紹subprocess模塊的是由于該模塊可以替代舊模塊的方法,如os.system()、os.popen()等,推薦使用。subporcess模塊可以調用外部系統命令來創建新子進程,同時可以連接到子進程的nput/output/error管道上,并得到子進程的返回值。subprocess模塊主要有call()、check_call()、check_output()、Popen()函數,簡要描述如下:

Main API

========

call(...): Runs a command, waits for it to complete, then returns the return code.

check_call(...): Same as call() but raises CalledProcessError() if return code is not 0

check_output(...): Same as check_call() but returns the contents of stdout instead of a return code

Popen(...): A class for flexibly executing a command in a new process

Constants

---------

PIPE: Special value that indicates a pipe should be created

STDOUT: Special value that indicates that stderr should go to stdout

下面開始介紹subprocess函數的使用方法。

(1)subprocess.Popen類

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

參數說明:

args:

要調用的外部系統命令。

bufsize:

默認值為0, 表示不緩存,。為1表示行緩存,。其他正數表示緩存使用的大小,,負數-1表示使用系統默認的緩存大小。

stdin、stdout、stdout

分別表示標準輸入、標準輸出和標準錯誤。其值可以為PIPE、文件描述符和None等。默認值為None,表示從父進程繼承。

shell

Linux:參數值為False時,Linux上通過調用os.execvp執行對應的程序。為Trule時,Linux上直接調用系統shell來執行程序。

Windows:shell參數表示是否使用bat作為執行環境。只有執行windows的dir、copy等命令時才需要設置為True。其他程序沒有區別。

executable

用于指定可執行程序。一般情況下我們通過args參數來設置所要運行的程序。如果將參數shell設為 True,executable將指定程序使用的shell。在windows平臺下,默認的shell由COMSPEC環境變量來指定。

preexec_fn

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

cwd

設置子進程當前目錄

env

env是字典類型,用于指定子進程的環境變量。默認值為None,表示子進程的環境變量將從父進程中繼承。

Universal_newlines

不同操作系統下,文本的換行符是不一樣的。如:windows下用'/r/n'表示換,而Linux下用 ‘/n'。如果將此參數設置為True,Python統一把這些換行符當作'/n'來處理。

Popen對象對應的屬性和方法如下:

屬性:

stdin, stdout, stderr, pid, returncode

方法:

communicate(self, input=None) -> returns a tuple (stdout, stderr).

wait(self) -> Wait for child process to terminate. Returns returncode attribute.

常用實例

1、打印D:\temp目錄下創建test目錄。直接調用進程,不考慮獲取調用命令輸出內容和結果碼

import subprocess

p = subprocess.Popen(args='mkdir test', shell=True, cwd='d:/temp')

p.wait()

2、調用ping命令執行,獲取命令執行輸出內容

import subprocess

p = subprocess.Popen(args='ping -n 2 -w 3 192.168.1.104', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

p.wait()

print p.stdout.read()

說明:p.stdout、p.stdin、p.stderr為文件對象,可以使用文件對象函數,如read()。

(2)subprocess.call()

函數原型:call(*popenargs, **kwargs)。call()調用外部系統命令執行,并返回程序執行結果碼。

import subprocess

retcode = subprocess.call('ping -n 2 -w 3 192.168.1.104', shell=True)

print retcode

(3)subprocess.check_call()

使用方法同call()。如果調用命令執行成功,返回結果碼0,如果執行失敗,拋出CalledProcessError.異常。舉例如下:

>>> p = subprocess.check_call('ping -n 2 -w 3 192.168.1.105', shell=True)

正在 Ping 192.168.1.105 具有 32 字節的數據:

請求超時。

請求超時。

192.168.1.105 的 Ping 統計信息:

數據包: 已發送 = 2,已接收 = 0,丟失 = 2 (100% 丟失),

Traceback (most recent call last):

File "", line 1, in

File "c:\Python27\lib\subprocess.py", line 186, in check_call

raise CalledProcessError(retcode, cmd)

subprocess.CalledProcessError: Command 'ping -n 2 -w 3 192.168.1.105' returned non-zero exit status 1

(4)subprocess.check_output()

函數原型:check_output(*popenargs, **kwargs)。用法與call()相同。區別是如果執行成功返回的是標準輸出內容。如果失敗,拋CalledProcessError.異常。

import subprocess

output = subprocess.check_output('ping -n 2 -w 3 192.168.1.104', shell=True)

print output

2、os模塊

(1)os.system()

os.system(command) 。調用外部系統命令,返回命令結果碼,但是無法獲取命令執行輸出結果,輸出結果直接打印到屏幕終端。

import os

retcode = os.system('ping -n 2 -w 3 192.168.1.104')

if retcode == 0:

print "%s Success" % (ip,)

else:

print "%s Fail" % (ip,)

(2)os.popen()

os.popen(command) 。調用外部系統命令,返回命令執行輸出結果,但不返回結果嗎

import os

output = os.popen('ping -n 2 -w 3 192.168.1.104')

print output

3、commands模塊

commands模塊用于調用Linux shell命令。測試了下在windows上執行失敗。主要有如下3個函數

getoutput(cmd): Return output (stdout or stderr) of executing cmd in a shell.

getstatus(file):Return output of "ls -ld " in a string.

getstatusoutput(cmd):Return (status, output) of executing cmd in a shell

使用實例如下:

import commands

retcode, output = commands.getstatusoutput('ping -n 2 -w 3 192.168.1.104')

print retcode

print output

總結

在編寫程序時可根據使用場景來選擇不同的Python調用方法來執行外部系統命令。對于復雜的命令考慮使用subprocess.Popen()完成,如果僅是簡單的命令執行,可以使用os.system()完成,如調用windows的暫停程序命令os.system('pause')。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

總結

以上是生活随笔為你收集整理的python调用系统命令_Python如何调用外部系统命令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。