iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 30
0
自我挑戰組

從寫程式到脫離菜雞的歷練(以python為主的資處與檔案權限)系列 第 30

[D30] pythonOS:系統指令和應用

要做檔案處理怎麼可以對系統指令不熟悉呢?
往往python做起來較複雜的可直接用系統指令來執行。


system() & popen()

等於替代了終端機,讓程式可直接調用原本在終端執行的指令。
其又以system()特性最像cmd,而popen()就比較偏向輸出內容了。

system()

os.system("此環境指令")
#使用system()必須注意指令是否適合環境作業系統

#Windows

import os
ph = "123.txt"
ld = os.path.dirname(__file__)
#powershell
os.system("cls") #清除螢幕
os.system("pip list") #pip套件列
os.system("ipconfig /all") #網路卡資訊
os.system("mkdir dir") #建立資料夾
os.system("copy cmd.py abc") #複製至abc目錄裡
os.system("del cmd.py")    #刪除檔案
os.system("notepad 123.txt") #記事本開文件
#Linux

import os
ph = "123.txt"
ld = os.path.dirname(__file__)
#terminal
os.system("su -")  #以su身分執行
os.system("clear")  #清除螢幕
os.system("pip list")  #pip套件列
os.system("ip a")  #網路卡資訊
os.system("mkdir dir")  #建立資料夾
os.system("cp cmd.py/./abc")  #複製至abc目錄裡
os.system("rm cmd.py")    #刪除檔案
os.system("gedit 123.txt")  #打開文件
  • echo用意

這指令可印出程式輸出或自定義內容。巧合的是幾乎所有OS都有這指令:

echo xxxx == 印出xxxx
echo on == 開啟印出內容(預設)
echo off == 關閉印出內容 (連同指令列隱藏)
@echo off == 關閉印出內容 (連同指令列,資料,程式碼隱藏)

Ex:(@echo off應用資料處理)

import os
os.system("@echo off") #關閉所有echo
os.system("cls")
os.system("echo 123123") #echo印出
fa = int(input("要幾個檔案?"))
for i in range(0,fa):
    i+=1
    os.system("cd.> %d.c" %i)
#os.system("exit")

popen()

os.popen("此環境指令" , "處理模式" , 緩衝大小)

  • 處理模式:因為模式是命令列 所以只有r跟w
  • 緩衝大小:執行命令時的緩衝 緩衝數值為int
    0 ==> 無緩衝 (popen不支援無緩衝)
    >0 ==> 進行緩衝 緩衝值隨數值變大(單位:一字節)
    <0 ==> 使用系統默認緩衝值

使用popen()好處不只可制定更多細微指令,還可確認執行情形(記憶體位址)。

import os
a1 = os.popen(u"echo 小雨好帥","w" , 1)
a2 = os.popen(u"mkdir 目錄更帥" , "r" , 1) #=-="
b1 = os.system("cd.> 小雨.帥哥") #無法印出狀態
print(a1 , a2 ,b1 , sep="\n")

明天來講python怎麼處理檔案權限與應用


上一篇
[D29] 檔案批次處理 & shutil
下一篇
[D31] pythonOS:權限和split()
系列文
從寫程式到脫離菜雞的歷練(以python為主的資處與檔案權限)32

尚未有邦友留言

立即登入留言