IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 中年大叔蝉联周榜亚军!今天告诉你一个小秘技:怎样用python来获取各种DOS命令显示的内容?注意不是返回值哦! -> 正文阅读

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

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

言归正传,我们经常在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')
<os._wrap_close object at 0x0000000002C82580>
>>> #一定要加上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    <DIR>          Program Files
2021/10/12  10:54    <DIR>          Program Files (x86)
2021/09/16  14:45    <DIR>          temp
2021/03/18  15:42    <DIR>          Users
2021/10/13  15:45    <DIR>          Windows
2021/10/11  11:11    <DIR>          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

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:54:25  更:2021-10-20 12:54:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:33:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码