在python中有多种方式可以执行命令并捕获输出。目前广泛使用的是subprocess模块。它提供了一个Popen的类来启动和设置子进程的参数。它还提供了一些便利函数,如call ,check_call, check_output等,这些便利函数是对Popen类的封装。
1.call
subprocess.call(args, *, stdin=None,stdout=None,stderr=None,shell=False)
其中当shell为False时,args接收的是一条命令的字符串列表。返回值是命令执行后的状态码。
subprocess.call(['ls', '-la'])
当shell为True, args可以接受一条命令的字符串。
subprocess.call(['ls', '-la'], shell=True)
2.check_call
与call相似,只不过多了一个验证状态码的功能。当命令执行失败时,返回的是非零的状态码,将抛出异常。
3. check_output
可以获取命令的回显。
subprocess.check_output(['df', '-h']), 若命令执行失败,会抛出异常。
4.Popen类
Popen类相比于上面的便利函数来讲更加灵活,能处理更复杂的情况。
Popen对象创建后,子进程便会运行。Popen类提供了一些方法来控制子进程的运行。
-------wait: 等待子进程结束
-------poll:检查子进程状态;
-------kill: 给子进程发送SIGKILL信号终止子进程;
-------send_signal: 向子进程发送信号;
-------terminate: 给子进程发送SIGTERM信号终止子进程。
-------communicate: 与子进程交互。
网友评论