首先,要恭喜一下自己蝉联了周榜亚军!
言归正传,我们经常在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 ,没有见到日期显示,但在控制台窗口下是可以显示的:
time 命令也一样,另外这两个命令还能用“echo 环境变量”来实现。看上图中语句返回的两行第一行显示的是我们想获取的值,第二行是命令返回值,通过赋值只能得到这个返回值 0 。
题外话:DOS中用两个%把环境变量名括起来表示一个环境变量, 可以用dos命令 set 来显示和设置这些系统环境变量。除了用“set path”外,path 命令可以单独显示 %PATH% 变量。
从上图中可以看到,用引号和波浪线 :~pos, length 可以把环境变量值按开始位置和所要长度来分割开,类似python的字符串切片: str='2021-10-19'; str[0: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