本文將介紹如何使用Python執行Shell命令並獲取執行過程信息。我們將從以下幾個方面進行闡述:
一、執行Shell命令
Python內置的subprocess模塊可以方便地執行Shell命令。使用subprocess模塊的方法如下:
import subprocess subprocess.run(["ls", "-l"]) # 執行ls -l命令
上述代碼中,subprocess.run()可以執行帶參數的命令,命令和參數作為列表傳入。執行結果以CompletedProcess對象的形式返回。
二、獲取執行結果
Subprocess模塊提供了多種方式獲取執行結果,如通過標準輸出、標準錯誤輸出和返回值等。下面分別介紹:
1. 通過標準輸出獲取執行結果
可以通過subprocess.run()的stdout參數來獲取執行結果。例如:
import subprocess result = subprocess.run(["ls", "-l"], stdout=subprocess.PIPE) print(result.stdout.decode())
上述代碼中,指定stdout=subprocess.PIPE可以將標準輸出返回給調用者,然後通過result.stdout獲取執行結果,並將其以字符串形式打印出來。
2. 通過標準錯誤輸出獲取執行結果
同樣可以通過subprocess.run()的stderr參數獲取執行結果,例如:
import subprocess result = subprocess.run(["ls", "-l", "nonexistent"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) print(result.stderr.decode())
上述代碼中,由於指定的目錄不存在,程序執行會出現錯誤。我們通過stderr=subprocess.PIPE指定標準錯誤輸出,然後通過result.stderr獲取錯誤信息,並將其以字符串形式打印出來。
3. 通過返回值獲取執行結果
可以通過subprocess.run()的returncode屬性來獲取命令的返回值。例如:
import subprocess result = subprocess.run(["ls", "-l", "nonexistent"]) print("return code:", result.returncode)
上述代碼中,由於指定的目錄不存在,程序執行會返回錯誤碼。我們通過result.returncode獲取錯誤碼,並將其輸出。
三、更加高級的用法
有時候,我們需要更複雜的命令行操作,比如進程間通信、輸入輸出重定向等。在這種情況下,我們可以使用更加高級的用法。
1. 通過管道傳遞數據
下面的示例演示如何通過管道將數據傳遞給命令行:
import subprocess # execute echo 'hello world' | wc command with subprocess.Popen(["echo", "hello world"], stdout=subprocess.PIPE) as echo: with subprocess.Popen(["wc", "-w"], stdin=echo.stdout, stdout=subprocess.PIPE) as wc: result = wc.communicate() print(result[0].decode())
上述代碼中,我們使用了兩個子進程。首先執行echo “hello world”命令,並通過stdout=subprocess.PIPE將標準輸出發送到子進程的標準輸入。然後通過stdin=echo.stdout,將管道從第一個子進程傳遞給第二個子進程。注意,使用with語句可以確保進程安全地關閉。
2. 輸入輸出重定向
下面的示例演示如何重定向子進程的標準輸入、標準輸出和標準錯誤輸出:
import subprocess # execute echo 'hello world' > hello.txt command with open("hello.txt", "w") as file: subprocess.run(["echo", "hello world"], stdout=file) # execute cat < hello.txt command with open("hello.txt", "r") as file: subprocess.run(["cat"], stdin=file) # execute ls -ld /nonexistent > nonexist.txt 2>&1 with open("nonexist.txt", "w") as file: subprocess.run(["ls", "-ld", "/nonexistent"], stdout=file, stderr=subprocess.STDOUT)
上述代碼中,第一個示例演示了如何將標準輸出重定向到文件中。第二個示例演示了如何將文件內容作為標準輸入傳遞給子進程。第三個示例演示了如何重定向標準錯誤輸出。
四、總結
使用Python執行Shell命令並獲取執行過程信息可以用一個非常簡單的接口完成,同時具有很強的實用性。我們可以通過subprocess模塊輕鬆地執行Shell命令,並獲取執行過程中的各種信息。同時,subprocess模塊還提供了很多高級特性,方便處理更高級的命令行操作。
原創文章,作者:HGHNA,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/374485.html