摘要:可以執行命令的相關模塊和函數有廢棄廢棄廢棄,中被移除以上執行命令的相關的模塊和函數的功能均在模塊中實現,并提供了更豐富的功能。所以不能將設置為同時重定向子進程的標準輸入輸出與錯誤。同上用于設置子進程的當前目錄用于指定子進程的環境變量。
可以執行shell命令的相關模塊和函數有:
subprocess callos.system
os.spawn
os.popen --廢棄
popen --廢棄
commands --廢棄,3.x中被移除
以上執行shell命令的相關的模塊和函數的功能均在 subprocess 模塊中實現,并提供了更豐富的功能。
執行命令,返回狀態碼
>>> 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
執行命令,如果執行狀態碼是 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
執行命令,如果狀態碼是 0 ,則返回執行結果,否則拋異常
>>> 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
用于執行復雜的系統命令
參數:
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 -> 同意使用 n
startupinfo與createionflags只在windows下有效
將被傳遞給底層的CreateProcess()函數,用于設置子進程的一些屬性,如:主窗口的外觀,進程的優先級等等
執行普通命令
>>> import subprocess >>> ret1 = subprocess.Popen(["mkdir","t1"]) >>> ret2 = subprocess.Popen("mkdir t2", shell=True) >>> print(ret1)>>> print(ret2)
終端輸入的命令分為兩種:
輸入即可得到輸出,如:ifconfig
輸入進行某環境,依賴再輸入,如: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 ", "")
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41628.html
摘要:以前我一直用處理一些系統管理任務因為我認為那是運行命令最簡單的方式我們能從官方文檔里讀到應該用模塊來運行系統命令模塊允許我們創建子進程連接他們的輸入輸出錯誤管道,還有獲得返回值。模塊打算來替代幾個過時的模塊和函數,比如命令。 以前我一直用os.system()處理一些系統管理任務,因為我認為那是運行linux命令最簡單的方式.我們能從Python官方文檔里讀到應該用subprocess...
摘要:執行命令的方法模塊方式說明這個調用相當直接,且是同步進行的,程序需要阻塞并等待返回。返回值是依賴于系統的,直接返回系統的調用返回值,所以和是不一樣的。并能夠獲得新建進程運行的返回狀態。使用模塊的目的是替代等舊的函數或模塊。 python執行shell命令的方法 os模塊 os.system方式: import os os.system(top) os.system(cat /proc...
摘要:子程序執行將在新進程中完成。要在上執行子程序,該類將使用該函數。如果是字符串,則字符串指定要通過執行的命令。如果是任何其他負值,則表示完全緩沖。它用于通過網絡進行系統管理和應用程序部署。 showImg(https://segmentfault.com/img/remote/1460000018833620); 來源 | 愿碼(ChainDesk.CN)內容編輯 愿碼Slogan |...
摘要:本米撲博客先介紹幾個最簡單的發送郵件方式記錄下,像郵件,附件等也是支持的,需要時查文檔即可。特別注意命令發送郵件,默認用端口號,由于阿里云騰訊云等封禁了端口號,因此本示例需在開通端口機器上測試執行命令收件結果 Python發送email的三種方式,分別為使用登錄郵件服務器、使用smtp服務、調用sendmail命令來發送三種方法 本文原文自米撲博客:Python 發送 email 的三...
閱讀 2158·2021-09-22 10:56
閱讀 1465·2021-09-07 10:11
閱讀 1801·2019-08-30 15:54
閱讀 2290·2019-08-30 15:44
閱讀 2307·2019-08-29 12:40
閱讀 3031·2019-08-28 18:25
閱讀 1735·2019-08-26 10:24
閱讀 3186·2019-08-23 18:39