首先,要恭喜一下自己蟬聯了周榜亞軍!

言歸正傳,我們經常在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

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/325586.html
標籤:其他
