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,他会直接执行命令,返回的值也只是执行的状态情况。