摘要:可以執(zhí)行命令的相關(guān)模塊和函數(shù)有廢棄廢棄廢棄,中被移除以上執(zhí)行命令的相關(guān)的模塊和函數(shù)的功能均在模塊中實現(xiàn),并提供了更豐富的功能。所以不能將設(shè)置為同時重定向子進(jìn)程的標(biāo)準(zhǔn)輸入輸出與錯誤。同上用于設(shè)置子進(jìn)程的當(dāng)前目錄用于指定子進(jìn)程的環(huán)境變量。
可以執(zhí)行shell命令的相關(guān)模塊和函數(shù)有:
subprocess callos.system
os.spawn
os.popen --廢棄
popen --廢棄
commands --廢棄,3.x中被移除
以上執(zhí)行shell命令的相關(guān)的模塊和函數(shù)的功能均在 subprocess 模塊中實現(xiàn),并提供了更豐富的功能。
執(zhí)行命令,返回狀態(tài)碼
>>> import subprocess >>> ret = subprocess.call(["ls", "-l"], shell=False) total 4684 -rw-r--r-- 1 root root 454 May 5 12:20 aa.py -rw-r--r-- 1 root root 0 May 8 16:51 aa.txt -rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe -rw-r--r-- 1 root root 422 May 5 12:20 ip_info.txt -rw-r--r-- 1 root root 718 Apr 19 10:52 my.cnf >>> ret = subprocess.call("ls -l", shell=True) total 4684 -rw-r--r-- 1 root root 454 May 5 12:20 aa.py -rw-r--r-- 1 root root 0 May 8 16:51 aa.txt -rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe -rw-r--r-- 1 root root 422 May 5 12:20 ip_info.txt -rw-r--r-- 1 root root 718 Apr 19 10:52 my.cnf >>> print(ret) 0check_call
執(zhí)行命令,如果執(zhí)行狀態(tài)碼是 0 ,則返回0,否則拋異常
>>> subprocess.check_call(["ls", "-l"]) total 4684 -rw-r--r-- 1 root root 454 May 5 12:20 aa.py -rw-r--r-- 1 root root 0 May 8 16:51 aa.txt -rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe -rw-r--r-- 1 root root 422 May 5 12:20 ip_info.txt -rw-r--r-- 1 root root 718 Apr 19 10:52 my.cnf 0 >>> subprocess.check_call("exit 1", shell=True) Traceback (most recent call last): File "check_output", line 1, in File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 581, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command "exit 1" returned non-zero exit status 1
執(zhí)行命令,如果狀態(tài)碼是 0 ,則返回執(zhí)行結(jié)果,否則拋異常
>>> subprocess.check_output(["echo", "Hello World!"]) b"Hello World! " >>> subprocess.check_output("exit 1", shell=True) Traceback (most recent call last): File "subprocess.Popen(...)", line 1, in File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 626, in check_output **kwargs).stdout File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 708, in run output=stdout, stderr=stderr) subprocess.CalledProcessError: Command "exit 1" returned non-zero exit status 1
用于執(zhí)行復(fù)雜的系統(tǒng)命令
參數(shù):
args:shell命令,可以是字符串或者序列類型(如:list,元組)
bufsize:指定緩沖。0 無緩沖,1 行緩沖,其他 緩沖區(qū)大小,負(fù)值 系統(tǒng)緩沖
stdin, stdout, stderr:分別表示程序的標(biāo)準(zhǔn)輸入、輸出、錯誤句柄
preexec_fn:只在Unix平臺下有效,用于指定一個可執(zhí)行對象(callable object),它將在子進(jìn)程運(yùn)行之前被調(diào)用
close_sfs:在windows平臺下,如果close_fds被設(shè)置為True,則新創(chuàng)建的子進(jìn)程將不會繼承父進(jìn)程的輸入、輸出、錯誤管道。
所以不能將close_fds設(shè)置為True同時重定向子進(jìn)程的標(biāo)準(zhǔn)輸入、輸出與錯誤(stdin, stdout, stderr)。
shell:同上
cwd:用于設(shè)置子進(jìn)程的當(dāng)前目錄
env:用于指定子進(jìn)程的環(huán)境變量。如果env = None,子進(jìn)程的環(huán)境變量將從父進(jìn)程中繼承。
universal_newlines:不同系統(tǒng)的換行符不同,True -> 同意使用 n
startupinfo與createionflags只在windows下有效
將被傳遞給底層的CreateProcess()函數(shù),用于設(shè)置子進(jìn)程的一些屬性,如:主窗口的外觀,進(jìn)程的優(yōu)先級等等
執(zhí)行普通命令
>>> import subprocess >>> ret1 = subprocess.Popen(["mkdir","t1"]) >>> ret2 = subprocess.Popen("mkdir t2", shell=True) >>> print(ret1)>>> print(ret2)
終端輸入的命令分為兩種:
輸入即可得到輸出,如:ifconfig
輸入進(jìn)行某環(huán)境,依賴再輸入,如:python
>>> import subprocess >>> obj = subprocess.Popen("mkdir t3", shell=True, cwd="/tmp/",)
>>> import subprocess >>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) >>> obj.stdin.write("print(1) ") 9 >>> obj.stdin.write("print(2)") 8 >>> obj.stdin.close() >>> cmd_out = obj.stdout.read() >>> obj.stdout.close() >>> cmd_error = obj.stderr.read() >>> obj.stderr.close() >>> print(cmd_out) 1 2 >>> print(cmd_error)
>>> import subprocess >>> >>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) >>> obj.stdin.write("print(1) ") 9 >>> obj.stdin.write("print(2)") 8 >>> >>> out_error_list = obj.communicate() >>> print(out_error_list) ("1 2 ", "")
>>> 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) ("hello ", "")
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41628.html
摘要:以前我一直用處理一些系統(tǒng)管理任務(wù)因為我認(rèn)為那是運(yùn)行命令最簡單的方式我們能從官方文檔里讀到應(yīng)該用模塊來運(yùn)行系統(tǒng)命令模塊允許我們創(chuàng)建子進(jìn)程連接他們的輸入輸出錯誤管道,還有獲得返回值。模塊打算來替代幾個過時的模塊和函數(shù),比如命令。 以前我一直用os.system()處理一些系統(tǒng)管理任務(wù),因為我認(rèn)為那是運(yùn)行l(wèi)inux命令最簡單的方式.我們能從Python官方文檔里讀到應(yīng)該用subprocess...
摘要:執(zhí)行命令的方法模塊方式說明這個調(diào)用相當(dāng)直接,且是同步進(jìn)行的,程序需要阻塞并等待返回。返回值是依賴于系統(tǒng)的,直接返回系統(tǒng)的調(diào)用返回值,所以和是不一樣的。并能夠獲得新建進(jìn)程運(yùn)行的返回狀態(tài)。使用模塊的目的是替代等舊的函數(shù)或模塊。 python執(zhí)行shell命令的方法 os模塊 os.system方式: import os os.system(top) os.system(cat /proc...
摘要:子程序執(zhí)行將在新進(jìn)程中完成。要在上執(zhí)行子程序,該類將使用該函數(shù)。如果是字符串,則字符串指定要通過執(zhí)行的命令。如果是任何其他負(fù)值,則表示完全緩沖。它用于通過網(wǎng)絡(luò)進(jìn)行系統(tǒng)管理和應(yīng)用程序部署。 showImg(https://segmentfault.com/img/remote/1460000018833620); 來源 | 愿碼(ChainDesk.CN)內(nèi)容編輯 愿碼Slogan |...
摘要:本米撲博客先介紹幾個最簡單的發(fā)送郵件方式記錄下,像郵件,附件等也是支持的,需要時查文檔即可。特別注意命令發(fā)送郵件,默認(rèn)用端口號,由于阿里云騰訊云等封禁了端口號,因此本示例需在開通端口機(jī)器上測試執(zhí)行命令收件結(jié)果 Python發(fā)送email的三種方式,分別為使用登錄郵件服務(wù)器、使用smtp服務(wù)、調(diào)用sendmail命令來發(fā)送三種方法 本文原文自米撲博客:Python 發(fā)送 email 的三...
閱讀 2205·2021-09-22 10:56
閱讀 1496·2021-09-07 10:11
閱讀 1816·2019-08-30 15:54
閱讀 2304·2019-08-30 15:44
閱讀 2320·2019-08-29 12:40
閱讀 3040·2019-08-28 18:25
閱讀 1754·2019-08-26 10:24
閱讀 3201·2019-08-23 18:39