網站首頁 編程語言 正文
os.system()和os.popen()概述
大家搞python與操作系統交互時,必須掌握的兩個方法就是os.system()和os.popen(),也是在相關技術領域面試中必問的題目!本文就對這兩個命令進行詳細介紹,os.system()和os.popen()都可以執行shell命令,但是他們還是有一定的區別的。
話不多說,先拿實例說事兒!
目錄/opt/scripts/test 中包括文件:ClassDemo2.groovy ClassDemo.groovy Demo3.groovy pyscript.py
我們執行os.system命令:
>>> os.system('cd /opt/scripts/test;ls')
ClassDemo2.groovy ClassDemo.groovy Demo3.groovy pyscript.py
0
這里的0表示執行成功
接下來再看os.popen命令:
>>> os.popen('cd /opt/scripts/test;ls')
<open file 'cd /opt/scripts/test;ls', mode 'r' at 0x7fa7dd7d1660>
如果想看到具體的值,可以這樣使用
>>> f=os.popen('cd /opt/scripts/test;ls')
>>> print(f.readlines())
['ClassDemo2.groovy\n', 'ClassDemo.groovy\n', 'Demo3.groovy\n', ,'pyscript.py\n']
注意如果連續執行多條語句可以使用“;”分割,實例中的cd /opt/scripts/test;ls 就是相關應用。
具體細節如下:
1. 命令被分號“;”分隔,這些命令會順序執行下去;
2. 命令被“&&”分隔,這些命令會順序執行下去,遇到執行錯誤的命令停止;
3. 命令被雙豎線“||”分隔,這些命令會順序執行下去,遇到執行成功的命令停止,后面的所有命令都將不會執行;
os.system細節
os.system方法是os模塊最基礎的方法,其它的方法一般在該方法基礎上封裝完成。返回的是退出狀態碼。os的system原理是每一條system函數執行時,通過當前 Shell 啟動的一個新的子進程或子 Shell 被稱為 SubShell (子 Shell )。子 Shell 會自動繼承父 Shell 的很多環境,如環境變量、工作目錄、文件描述符等,但是反之,子 Shell 中的環境僅在子 Shell 中有效,父 Shell 無法讀取子 Shell 的環境。例如,如果在父 shell 里定義全局變量,子 shell 中就可以調用該變量。但當在子 shell 中定義一個局部變量時,父 shell 是無法讀取該變量的。
os.popen細節
os.popen() 方法用于從一個命令打開一個管道,返回的是命令的輸出結果。從這個命令獲取的值可以繼續被使用。因為它返回一個文件對象,可以對這個文件對象進行相關的操作。
popen()方法語法格式:
os.popen(command[, mode[, bufsize]])
參數:
command -- 使用的命令
mode -- 模式權限可以是 'r'(默認) 或 'w'。
bufsize -- 指明了文件需要的緩沖大小:0意味著無緩沖;1意味著行緩沖;其它正值表示使用參數大小的緩沖(大概值,以字節為單位)。負的bufsize意味著使用系統的默認值,一般來說,對于終端設備,它是行緩沖;對于其它文件,它是全緩沖。如果沒有改參數,使用系統的默認值。
返回值:
返回一個文件描述符號為fd(文件索引)的打開的文件對象
二者使用總結
如果要直接看到運行結果的話,應該使用os.system;如果需要獲取返回值做進一步的處理則使用os.popen
原文鏈接:https://blog.csdn.net/liwenxiang629/article/details/125187306
相關推薦
- 2023-09-17 POM文件中使用<exclusions>解決jar沖突問題
- 2022-10-15 Go?Excelize?API源碼解讀GetSheetViewOptions與SetPageLayo
- 2022-10-27 kotlin?協程上下文異常處理詳解_Android
- 2022-04-06 C語言函數調用的三種實現方法實例_C 語言
- 2022-10-14 VSCode連接實驗室服務器Xshell,Xftp向服務器傳輸文件的方法(win10)_Linux
- 2023-10-09 Cookie和localStorage存儲的區別
- 2022-10-23 C#中的yield關鍵字詳解_C#教程
- 2022-02-23 關于zabbix自定義監控項和觸發器問題_zabbix
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支