本文将介绍如何使用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/n/374485.html