Python
Python是一种高级的、面向对象的、解释性的动态编程语言,它具有简洁、易读、易学、可扩展等特点,支持多种编程范式,广泛应用于Web开发、科学计算、机器学习、数据分析等领域。
CMD命令框
CMD是Windows下的命令行解释器,也称为命令提示符。CMD命令框提供了许多命令,可以执行各种操作,如查看文件、目录、进程等信息,创建和删除文件、目录,运行程序等。CMD命令框还支持一些特殊的命令,如管道命令、重定向命令等。
Python控制CMD命令框
Python可以通过内置的subprocess模块来控制CMD命令框,实现执行CMD命令、获取输出和错误信息、发送输入等操作。subprocess模块提供了多个函数和类来启动子进程,每个函数和类都有不同的使用方式和功能。
subprocess模块
subprocess模块是Python内置的一个管理子进程的模块,提供了多个函数和类来启动子进程,每个函数和类都有不同的使用方式和功能。常用的函数和类包括:
- subprocess.run(): 执行命令并等待完成,返回一个CompletedProcess对象;
- subprocess.Popen(): 启动一个新的进程,并返回一个Popen对象,可以使用该对象来控制子进程;
- subprocess.call(): 执行命令并等待完成,返回命令的返回值;
- subprocess.check_output(): 执行命令并返回输出结果,如果命令返回非零状态,则会抛出异常。
subprocess.run()
subprocess.run()函数用于执行一个命令并等待其完成,返回一个CompletedProcess对象。该函数的语法如下:
```
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, check=False, env=None, universal_newlines=None)
参数说明:
- args:指定要执行的命令及其参数,可以是字符串或列表形式;
- stdin:指定标准输入流。如果为None,则使用默认值;
- input:将字符串写入标准输入流。如果指定了此参数,则忽略stdin参数;
- stdout:指定标准输出流。如果为None,则使用默认值;
- stderr:指定标准错误流。如果为None,则使用默认值;
- shell:指定是否在Shell中执行命令;
- cwd:指定子进程的工作目录;
- timeout:指定子进程的超时时间;
- check:指定是否检查子进程的返回状态。如果为True,则在子进程返回非零状态时抛出异常;
- env:指定子进程的环境变量;
- universal_newlines:指定是否将输入输出转换成文本模式。
使用示例:
import subprocess
result = subprocess.run(['dir'], stdout=subprocess.PIPE, shell=True)
print(result.stdout.decode('GBK'))
该程序会执行dir命令,并将结果输出到标准输出流。由于dir命令的输出是GBK编码的,因此需要将输出结果用decode()函数转换成Unicode编码。
subprocess.Popen()
subprocess.Popen()函数用于启动一个新的进程,并返回一个Popen对象,可以使用该对象来控制子进程。该函数的语法如下:
subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=None, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None)
- bufsize:指定标准输入、输出缓存区的大小;
- executable:指定要执行的可执行文件;
- preexec_fn:指定子进程启动前要执行的函数;
- close_fds:指定在子进程中关闭所有文件描述符;
- universal_newlines:指定是否将输入输出转换成文本模式;
- startupinfo:指定子进程的启动信息;
- creationflags:指定进程创建的标志;
- restore_signals:指定是否恢复所有信号的默认处理程序;
- start_new_session:指定子进程是否要启动一个新的会话;
- pass_fds:指定在子进程中保留打开的文件描述符;
- encoding:指定文本模式下输入输出的编码;
- errors:指定文本模式下解码错误的策略。
proc = subprocess.Popen(['ping', 'www.baidu.com'], stdout=subprocess.PIPE)
for line in proc.stdout:
print(line.decode('GBK').strip())
该程序会启动一个ping命令的子进程,并将其输出结果逐行打印到标准输出流。由于ping命令的输出是GBK编码的,因此需要将输出结果用decode()函数转换成Unicode编码。
subprocess.call()
subprocess.call()函数用于执行一个命令并等待其完成,返回命令的返回值。该函数的语法如下:
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, check=False, env=None, universal_newlines=None)
result = subprocess.call(['ping', 'www.baidu.com'], stdout=subprocess.PIPE)
print(result)
该程序会执行ping命令,并将命令的返回值输出到标准输出流。如果命令执行成功,则返回值为0;否则返回非零值。
subprocess.check_output()
subprocess.check_output()函数用于执行一个命令并返回输出结果,如果命令返回非零状态,则会抛出异常。该函数的语法如下:
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, cwd=None, timeout=None, encoding=None, errors=None, universal_newlines=None)
网友留言(0)