os.system和os.popen方法


os.system函數

前沿:

os.system方法是os模塊最基礎的方法,其它的方法一般在該方法基礎上封裝完成。返回的是退出狀態碼。

os的system原理

  • system函數可以將字符串轉化成命令在服務器上運行;其原理是每一條system函數執行時,其會創建一個子進程在系統上執行命令行,子進程的執行結果無法影響主進程;
  • 上述原理會導致當需要執行多條命令行的時候可能得不到預期的結果;
    import os
    
    os.system('cd /usr/local')
    os.mkdir('aaa.txt)

     

  • 上述程序運行后會發現txt文件並沒有創建在/usr/local文件夾下,而是在當前的目錄下;

使用system執行多條命令

  • 為了保證system執行多條命令可以成功,多條命令需要在同一個子進程中運行;
    import os
    
    os.system('cd /usr/local && mkdir aaa.txt')
    # 或者
    os.system('cd /usr/local ; mkdir aaa.txt'

 多條復制命令的例子:

cp_command = 'cp {0} {1}/HE.jpg && cp {2} {1}/IHC.jpg && cp {3} {1}'.format(hepng,outdir,ihcpng,pdfile)
os.system(cp_command)

 

mkdir -p參數循環創建目錄

tumor = glob(project_path + '/T1*')[0]    #得到T1_文件路徑相應的路徑
outdir = tumor + '/PDL1'    #PDL1目錄
os.system('mkdir -p {}'.format(outdir))  #-p循環創建目錄

 

 

os.popen方法

概述:

os.popen() 方法用於從一個命令打開一個管道。返回的是命令的輸出結果。

在Unix,Windows中有效

語法

popen()方法語法格式:

os.popen(command[, mode[, bufsize]])

參數:

  • command -- 使用的命令
  • mode -- 模式權限可以是 'r'(默認) 或 'w'。
  • bufsize -- 指明了文件需要的緩沖大小:0意味着無緩沖;1意味着行緩沖;其它正值表示使用參數大小的緩沖(大概值,以字節為單位)。負的bufsize意味着使用系統的默認值,一般來說,對於tty設備,它是行緩沖;對於其它文件,它是全緩沖。如果沒有改參數,使用系統的默認值。

返回值:

返回一個文件描述符號為fd(file)的打開的文件對象,命令的輸出結果。

 

實例:

以下實例演示了 popen() 方法的使用:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os, sys

# 使用 mkdir 命令
a = 'mkdir nwdir'

b = os.popen(a,'r',1)

print b

執行以上程序輸出結果為:

open file 'mkdir nwdir', mode 'r' at 0x81614d0

 

實例:

讀取popen方法,返回的file對象。

>>> f=os.popen('ls') # 返回一個file對象,可以對這個文件對象進行相關的操作
>>> f
<open file 'ls', mode 'r' at 0x7f5303d124b0>
>>> f.readlines()
['Desktop\n', 'Documents\n', 'Downloads\n', 'examples.desktop\n', 'Music\n', 'Pictures\n', 'Public\n', 'systemExit.py\n', 'Templates\n', 'test.sh\n', 'Videos\n']

 

總結:os.popen()可以實現一個“管道”,從這個命令獲取的值可以繼續被使用。因為它返回一個文件對象,可以對這個文件對象進行相關的操作。

但是如果要直接看到運行結果的話,那就應該使用os.system,他會直接執行命令,返回的值也只是執行的狀態情況。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM