中年大叔蝉联周榜亚军!今天告诉你一个小秘技:怎样用python来获取各种DOS命令显示的内容?注意不是返回值哦!

首先,要恭喜一下自己蝉联了周榜亚军!

中年大叔蝉联周榜亚军!今天告诉你一个小秘技:怎样用python来获取各种DOS命令显示的内容?注意不是返回值哦!_第1张图片

言归正传,我们经常在C/C++中用“system("pause");”作暂停命令外,还有另外一些功能也很不错:

system("title C++颜色设置程序"); //设置控制台窗口的标题,即cmd.exe的标题
 
system("mode con cols=64 lines=25"); //设置窗口宽度高度
 
system("date /t");  //显示日期
 
system("time /t");  //显示时间
 
system("shutdown -s -t 3600");  //延时关机  3600秒即一小时后关机
 
system("shutdown -a");  //取消延时关机
 
system("color 0B");  //设置文本和背景颜色

核心就用system()函数调用windows操作系统的DOS命令来做点事情,iOS、linux系统中也一样,仅需把引号中的命令行字符串换成对应操作系统的命令即可。

Python语言中,os库的system()函数同样也是这个功能,举个例子:

>>> import os
>>> for _ in range(5):
	t = os.system('echo ')

	
>>> t
0
>>> 

以上代码可以发出5次蜂鸣声,这个实质就是ascii字符7(beep)的显示。它在Python IDLE窗口中呈现为“echo ”中的那个粗圆点,可以用alt键+小键盘上的007键入;在DOS窗口下的python中除了这个方法还能用“Ctrl+G”录入,呈现为“^G”。

代码运行结束后,t 就接受了echo命令的返回值,DOS命令执行成功一般都返回 0

同样换个DOS命令“Date /t”来显示日期:

>>> import os
>>> os.system('Date /t')
0
>>> 

同样,也只返回一个 0 ,没有见到日期显示,但在控制台窗口下是可以显示的:

中年大叔蝉联周榜亚军!今天告诉你一个小秘技:怎样用python来获取各种DOS命令显示的内容?注意不是返回值哦!_第2张图片

 time 命令也一样,另外这两个命令还能用“echo 环境变量”来实现。看上图中语句返回的两行第一行显示的是我们想获取的值,第二行是命令返回值,通过赋值只能得到这个返回值 0 。

中年大叔蝉联周榜亚军!今天告诉你一个小秘技:怎样用python来获取各种DOS命令显示的内容?注意不是返回值哦!_第3张图片

题外话:DOS中用两个%把环境变量名括起来表示一个环境变量, 可以用dos命令 set 来显示和设置这些系统环境变量。除了用“set path”外,path 命令可以单独显示 %PATH% 变量。

从上图中可以看到,用引号和波浪线 :~pos, length 可以把环境变量值按开始位置和所要长度来分割开,类似python的字符串切片: str='2021-10-19'; str[0:4]。

中年大叔蝉联周榜亚军!今天告诉你一个小秘技:怎样用python来获取各种DOS命令显示的内容?注意不是返回值哦!_第4张图片

各个时期的Dos版本的内部命令有增有减个数不定,另外还有很多的外部命令可用。 

D:\>set os
OS=Windows_NT

D:\>set systemdrive
SystemDrive=C:

D:\>set windir
windir=C:\Windows

D:\>set path
Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Python\Scripts\;D:\Python\
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

D:\>set pathext
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

D:\>path
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Python\Scripts\;D:\Python\

D:\>tree
...
...
...
...
省去N多行

回到正题,发个小秘技:

怎样才能获取dos命令显示的内容而不是返回值?

这要请出os库的另一个函数 popen() ,和fopen读取文件差不多,也用readlines()读取出信息的每一行;每一行都是一个以'\n'结尾的字符串元素,保存在同一个列表里,基本用法如下:

>>> import os
>>> os.popen('date /t')

>>> #一定要加上readlines()方法:
>>> os.popen('date /t').readlines()
['2021/10/19 周二 \n']
>>> os.popen('set path').readlines()
['PATH=C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;
C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;
D:\\Python\\Scripts\\;
D:\\Python\\\n', 
'PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC\n']
>>> 

自定义几个能抓取DOS命令返回信息的函数

>>> import os
>>> def Date():
	command = 'echo %date:~0,4%年%date:~5,2%月%date:~8,2%日'
	return os.popen(command).readlines()[0][:-1]

>>> Date()
'2021年10月19日'
>>> 
>>> def Weekday():
	command = 'echo 星期%date:~-1%'
	return os.popen(command).readlines()[0][:-1]

>>> Weekday()
'星期二'
>>> 
>>> def Time():
	command = 'echo %time%'
	return os.popen(command).readlines()[0][:8]

>>> Time()
'13:39:03'
>>> 
>>> import os
>>> def Dir(Drive):
	command = 'dir ' + Drive + ':'
	dirlist = os.popen(command).readlines()
	for d in dirlist:
		print(d, end='')
	print()

	
>>> Dir('C')
 驱动器 C 中的卷是 C_HD
 卷的序列号是 401B-F400

 C:\ 的目录

2021/10/14  09:55            17,783 2021年xxxxxxxxx总结10.18.xlsx
2021/10/12  10:54              Program Files
2021/10/12  10:54              Program Files (x86)
2021/09/16  14:45              temp
2021/03/18  15:42              Users
2021/10/13  15:45              Windows
2021/10/11  11:11              XSBDownload
               1 个文件         17,783 字节
               6 个目录 93,678,710,784 可用字节

>>> 
>>> def Path():
	command = 'path'
	dirlist = os.popen(command).readlines()
	dirlist = dirlist[0][:-1].split(';')
	for d in dirlist:
		print(d)
	print()

	
>>> Path()
PATH=C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
D:\Python\Scripts\
D:\Python\

>>> 

dos命令还有很多很多,其中有实用信息返回的都可以用os.system.popen().readlines()来获取。
 

一起学习交流 Python 的群二维码地址: http://qr01.cn/FHYKEa

 

你可能感兴趣的:(Python,#,Python,学习笔记,python)