日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python里的shell是什么_python中的shell操作

發(fā)布時(shí)間:2023/12/15 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python里的shell是什么_python中的shell操作 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://blog.csdn.net/meng_tianshi/article/details/6682317

首先介紹一個(gè)函數(shù):

os.system(command)

這個(gè)函數(shù)可以調(diào)用shell運(yùn)行命令行command并且返回它的返回值。試一下在python的解釋器里輸入os.system(”ls-l”),就可以看到”ls”列出了當(dāng)前目錄下的文件??梢哉f(shuō),通過(guò)這個(gè)函數(shù),python就擁有了shell的所有能力。呵呵。。不過(guò),通常這條命令不需要用到。因?yàn)閟hell常用的那些命令在python中通常有對(duì)應(yīng)而且同樣簡(jiǎn)潔的寫(xiě)法。

shell中最常用的是ls命令,python對(duì)應(yīng)的寫(xiě)法是:os.listdir(dirname),這個(gè)函數(shù)返回字符串列表,里面是所有的文件名,不過(guò)不包含”.”和”..”。如果要遍歷整個(gè)目錄的話(huà)就會(huì)比較復(fù)雜一點(diǎn)。我們等下再說(shuō)吧。先在解釋器里試一下:

>>> os.listdir(”/”)

[’tmp’, ‘misc’, ‘opt’, ‘root’, ‘.autorelabel’, ’sbin’, ’srv’,‘.autofsck’, ‘mnt’, ‘usr’, ‘var’, ‘etc’, ’selinux’, ‘lib’, ‘net’,‘lost+found’, ’sys’, ‘media’, ‘dev’, ‘proc’, ‘boot’, ‘home’, ‘bin’]

就像這樣,接下去所有命令都可以在python的解釋器里直接運(yùn)行觀看結(jié)果。

對(duì)應(yīng)于cp命令的是:shutil.copy(src,dest),這個(gè)函數(shù)有兩個(gè)參數(shù),參數(shù)src是指源文件的名字,參數(shù)dest則是目標(biāo)文件或者目標(biāo)目錄的名字。 如果dest是一個(gè)目錄名,就會(huì)在那個(gè)目錄下創(chuàng)建一個(gè)相同名字的文件。與shutil.copy函數(shù)相類(lèi)似的是shutil.copy2(src,dest),不過(guò)copy2還會(huì)復(fù)制最后存取時(shí)間和最后更新時(shí)間。

不過(guò),shell的cp命令還可以復(fù)制目錄,python的shutil.copy卻不行,第一個(gè)參數(shù)只能是一個(gè)文件。這怎么辦?其實(shí),python還有個(gè)shutil.copytree(src,dst[,symlinks])。參數(shù)多了一個(gè)symlinks,它是一個(gè)布爾值,如果是True的話(huà)就創(chuàng)建符號(hào)鏈接。

移動(dòng)或者重命名文件和目錄呢?估計(jì)被聰明的朋友猜到了,shutil.move(src,dst),呵呵。。與mv命令類(lèi)似,如果src和dst在同一個(gè)文件系統(tǒng)上,shutil.move只是簡(jiǎn)單改一下名字,如果src和dst在不同的文件系統(tǒng)上,shutil.move會(huì)先把src復(fù)制到dst,然后刪除src文件。看到現(xiàn)在,大多數(shù)朋友應(yīng)該已經(jīng)對(duì)python的能力有點(diǎn)眉目了,接下來(lái)我就列個(gè)表,介紹一下其它的函數(shù):

os.chdir(dirname)

把當(dāng)前工作目錄切換到dirname下

os.getcwd()

返回當(dāng)前的工作目錄路徑

os.chroot(dirname)

把dirname作為進(jìn)程的根目錄。和*nix下的chroot命令類(lèi)似

os.chmod(path,mode)

更改path的權(quán)限位。mode可以是以下值(使用or)的組合:

os.S_ISUID

os.S_ISGID

os.S_ENFMT

os.S_ISVTX

os.S_IREAD

os.S_IWRITE

os.S_IEXEC

os.S_IRWXU

os.S_IRUSR

os.S_IWUSR

os.S_IXUSR

os.S_IRWXG

os.S_IRGRP

os.S_IWGRP

os.S_IXGRP

os.S_IRWXO

os.S_IROTH

os.S_IWOTH

os.S_IXOTH

具體它們是什么含義,就不仔細(xì)說(shuō)了,基本上就是R代表讀,W代表寫(xiě),X代表執(zhí)行權(quán)限。USR代表用戶(hù),GRP代表組,OTH代表其它。

os.chown(path,uid,gid)

改變文件的屬主。uid和gid為-1的時(shí)候不改變?cè)瓉?lái)的屬主。

os.link(src,dst)

創(chuàng)建硬連接

os.mkdir(path,[mode])

創(chuàng)建目錄。mode的意義參見(jiàn)os.chmod(),默認(rèn)是0777

os.makedirs(path,[mode])

和os.mkdir()類(lèi)似,不過(guò)會(huì)先創(chuàng)建不存在的父目錄。

os.readlink(path)

返回path這個(gè)符號(hào)鏈接所指向的路徑

os.remove(path)

刪除文件,不能用于刪除目錄

os.rmdir(path)

刪除文件夾,不能用于刪除文件

os.symlink(src,dst)

創(chuàng)建符號(hào)鏈接

shutil.rmtree(path[,ignore_errors[,onerror]])

刪除文件夾

介紹了這么多,其實(shí)只要查一下os和shutil兩個(gè)模塊的文檔就有了,呵呵。。真正編寫(xiě)shell腳本的時(shí)候還需要注意:

1.環(huán)境變量。python的環(huán)境變量保存在os.environ這個(gè)字典里,可以用普通字典的方法修改它,使用system啟動(dòng)其它程序的時(shí)候會(huì)自動(dòng)被繼承。比如:

os.environ[”fish”]=”nothing”

不過(guò)也要注意,環(huán)境變量的值只能是字符串。和shell有些不同的是,python沒(méi)有export環(huán)境變量這個(gè)概念。為什么沒(méi)有呢?因?yàn)閜ython沒(méi)有必要有:-)

2.os.path這個(gè)模塊里包含了很多關(guān)于路徑名處理的函數(shù)。在shell里路徑名處理好像不是很重要,但是在python里經(jīng)常需要用到。最常用的兩個(gè)是分離和合并目錄名和文件名:

os.path.split(path) -> (dirname,basename)

這個(gè)函數(shù)會(huì)把一個(gè)路徑分離為兩部分,比如:os.path.split(”/foo/bar.dat”)會(huì)返回(”/foo”,”bar.dat”)

os.path.join(dirname,basename)

這個(gè)函數(shù)會(huì)把目錄名和文件名組合成一個(gè)完整的路徑名,比如:os.path.join(”/foo”,”bar.dat”)會(huì)返回”/foo /bar.dat”。這個(gè)函數(shù)和os.path.split()剛好相反。

還有這些函數(shù):

os.path.abspath(path)

把path轉(zhuǎn)成絕對(duì)路徑

os.path.expanduser(path)

把path中包含的”~”和”~user”轉(zhuǎn)換成用戶(hù)目錄

os.path.expandvars(path)

根據(jù)環(huán)境變量的值替換path中包含的”$name”和”${name}”,比如環(huán)境變量FISH=nothing,那 os.path.expandvars(”$FISH/abc”)會(huì)返回”nothing/abc”

os.path.normpath(path)

去掉path中包含的”.”和”..”

os.path.splitext(path)

把path分離成基本名和擴(kuò)展名。比如:os.path.splitext(”/foo/bar.tar.bz2″)返回(’/foo /bar.tar’, ‘.bz2′)。要注意它和os.path.split()的區(qū)別

3.在os模塊有一個(gè)很好用的函數(shù)叫os.stat()沒(méi)有介紹,因?yàn)閛s.path模塊里包含了一組和它具有同樣功能的函數(shù),但是名字更好記一點(diǎn)。

os.path.exists(path)

判斷文件或者目錄是否存在

os.path.isfile(path)

判斷path所指向的是否是一個(gè)普通文件,而不是目錄

os.path.isdir(path)

判斷path所指向的是否是一個(gè)目錄,而不是普通文件

os.path.islink(path)

判斷path所指向的是否是一個(gè)符號(hào)鏈接

os.path.ismount(path)

判斷path所指向的是否是一個(gè)掛接點(diǎn)(mount point)

os.path.getatime(path)

返回path所指向的文件或者目錄的最后存取時(shí)間。

os.path.getmtime(path)

返回path所指向的文件或者目錄的最后修改時(shí)間

os.path.getctime(path)

返回path所指向的文件的創(chuàng)建時(shí)間

os.path.getsize(path)

返回path所指向的文件的大小

4.應(yīng)用python編寫(xiě)shell腳本經(jīng)常要用到os,shutil,glob(正則表達(dá)式的文件名),tempfile(臨時(shí)文件),pwd(操作/etc/passwd文件),grp(操作/etc/group文件),commands(取得一個(gè)命令的輸出)。前面兩個(gè)已經(jīng)基本上介紹完了,后面幾個(gè)很簡(jiǎn)單,看一下文檔就可以了。

5.sys.argv是一個(gè)列表,保存了python程序的命令行參數(shù)。其中sys.argv[0]是程序本身的名字。

不能光說(shuō)不練,接下來(lái)我們就編寫(xiě)一個(gè)用于復(fù)制文件的簡(jiǎn)單腳本。前兩天叫我寫(xiě)腳本的同事有個(gè)幾萬(wàn)個(gè)文件的目錄,他想復(fù)制這些文件到其它的目錄,又不能直接復(fù)制目錄本身。他試了一下”cp src/* dest/”結(jié)果報(bào)了一個(gè)命令行太長(zhǎng)的錯(cuò)誤,讓我?guī)退麑?xiě)一個(gè)腳本。操起python來(lái):

import sys,os.path,shutil

for f in os.listdir(sys.argv[1]):

shutil.copy(os.path.join(sys.argv[1],f),sys.argv[2])

再試一下linuxapp版里的帖子——把一個(gè)文件夾下的所有文件重命名成10001~10999??梢赃@樣寫(xiě):

import os.path,sys

dirname=sys.argv[1]

i=10001

for f in os.listdir(dirname):

src=os.path.join(dirname,f)

if os.path.isdir(src):

continue

os.rename(src,str(i))

i+=1

http://blog.chinaunix.net/uid-23500957-id-3781893.html

python中對(duì)文件、文件夾(文件操作函數(shù))的操作需要涉及到os模塊和shutil模塊。

得到當(dāng)前工作目錄,即當(dāng)前Python腳本工作的目錄路徑: os.getcwd()

返回指定目錄下的所有文件和目錄名:os.listdir()

函數(shù)用來(lái)刪除一個(gè)文件:os.remove()

刪除多個(gè)目錄:os.removedirs(r“c:\python”)

檢驗(yàn)給出的路徑是否是一個(gè)文件:os.path.isfile()

檢驗(yàn)給出的路徑是否是一個(gè)目錄:os.path.isdir()

判斷是否是絕對(duì)路徑:os.path.isabs()

檢驗(yàn)給出的路徑是否真地存:os.path.exists()

返回一個(gè)路徑的目錄名和文件名:os.path.split()

分離擴(kuò)展名:os.path.splitext()

獲取路徑名:os.path.dirname()

獲取文件名:os.path.basename()

運(yùn)行shell命令: os.system()

讀取和設(shè)置環(huán)境變量:os.getenv() 與os.putenv()

給出當(dāng)前平臺(tái)使用的行終止符:os.linesepWindows使用'\r\n',Linux使用'\n'而Mac使用'\r'

指示你正在使用的平臺(tái):os.name 對(duì)于Windows,它是'nt',而對(duì)于Linux/Unix用戶(hù),它是'posix'

重命名:os.rename(old, new)

創(chuàng)建多級(jí)目錄:os.makedirs(r“c:\python\test”)

創(chuàng)建單個(gè)目錄:os.mkdir(“test”)

獲取文件屬性:os.stat(file)

修改文件權(quán)限與時(shí)間戳:os.chmod(file)

終止當(dāng)前進(jìn)程:os.exit()

獲取文件大小:os.path.getsize(filename)

文件操作:

os.mknod("test.txt") 創(chuàng)建空文件

fp = open("test.txt",w) 直接打開(kāi)一個(gè)文件,如果文件不存在則創(chuàng)建文件

關(guān)于open 模式:

w 以寫(xiě)方式打開(kāi),

a 以追加模式打開(kāi) (從 EOF 開(kāi)始, 必要時(shí)創(chuàng)建新文件)

r+ 以讀寫(xiě)模式打開(kāi)

w+ 以讀寫(xiě)模式打開(kāi) (參見(jiàn) w )

a+ 以讀寫(xiě)模式打開(kāi) (參見(jiàn) a )

rb 以二進(jìn)制讀模式打開(kāi)

wb 以二進(jìn)制寫(xiě)模式打開(kāi) (參見(jiàn) w )

ab 以二進(jìn)制追加模式打開(kāi) (參見(jiàn) a )

rb+ 以二進(jìn)制讀寫(xiě)模式打開(kāi) (參見(jiàn) r+ )

wb+ 以二進(jìn)制讀寫(xiě)模式打開(kāi) (參見(jiàn) w+ )

ab+ 以二進(jìn)制讀寫(xiě)模式打開(kāi) (參見(jiàn) a+ )

fp.read([size]) #size為讀取的長(zhǎng)度,以byte為單位

fp.readline([size]) #讀一行,如果定義了size,有可能返回的只是一行的一部分

fp.readlines([size]) #把文件每一行作為一個(gè)list的一個(gè)成員,并返回這個(gè)list。其實(shí)它的內(nèi)部是通過(guò)循環(huán)調(diào)用readline()來(lái)實(shí)現(xiàn)的。如果提供size參數(shù),size是表示讀取內(nèi)容的總長(zhǎng),也就是說(shuō)可能只讀到文件的一部分。

fp.write(str) #把str寫(xiě)到文件中,write()并不會(huì)在str后加上一個(gè)換行符

fp.writelines(seq) #把seq的內(nèi)容全部寫(xiě)到文件中(多行一次性寫(xiě)入)。這個(gè)函數(shù)也只是忠實(shí)地寫(xiě)入,不會(huì)在每行后面加上任何東西。

fp.close() #關(guān)閉文件。python會(huì)在一個(gè)文件不用后自動(dòng)關(guān)閉文件,不過(guò)這一功能沒(méi)有保證,最好還是養(yǎng)成自己關(guān)閉的習(xí)慣。 如果一個(gè)文件在關(guān)閉后還對(duì)其進(jìn)行操作會(huì)產(chǎn)生ValueError

fp.flush() #把緩沖區(qū)的內(nèi)容寫(xiě)入硬盤(pán)

fp.fileno() #返回一個(gè)長(zhǎng)整型的”文件標(biāo)簽“

fp.isatty() #文件是否是一個(gè)終端設(shè)備文件(unix系統(tǒng)中的)

fp.tell() #返回文件操作標(biāo)記的當(dāng)前位置,以文件的開(kāi)頭為原點(diǎn)

fp.next() #返回下一行,并將文件操作標(biāo)記位移到下一行。把一個(gè)file用于for … in file這樣的語(yǔ)句時(shí),就是調(diào)用next()函數(shù)來(lái)實(shí)現(xiàn)遍歷的。

fp.seek(offset[,whence]) #將文件打操作標(biāo)記移到offset的位置。這個(gè)offset一般是相對(duì)于文件的開(kāi)頭來(lái)計(jì)算的,一般為正數(shù)。但如果提供了whence參數(shù)就不一定了,whence可以為0表示從頭開(kāi)始計(jì)算,1表示以當(dāng)前位置為原點(diǎn)計(jì)算。2表示以文件末尾為原點(diǎn)進(jìn)行計(jì)算。需要注意,如果文件以a或a+的模式打開(kāi),每次進(jìn)行寫(xiě)操作時(shí),文件操作標(biāo)記會(huì)自動(dòng)返回到文件末尾。

fp.truncate([size]) #把文件裁成規(guī)定的大小,默認(rèn)的是裁到當(dāng)前文件操作標(biāo)記的位置。如果size比文件的大小還要大,依據(jù)系統(tǒng)的不同可能是不改變文件,也可能是用0把文件補(bǔ)到相應(yīng)的大小,也可能是以一些隨機(jī)的內(nèi)容加上去。

目錄操作:

os.mkdir("file") 創(chuàng)建目錄

復(fù)制文件:

shutil.copyfile("oldfile","newfile") oldfile和newfile都只能是文件

shutil.copy("oldfile","newfile") oldfile只能是文件夾,newfile可以是文件,也可以是目標(biāo)目錄

復(fù)制文件夾:

shutil.copytree("olddir","newdir") olddir和newdir都只能是目錄,且newdir必須不存在

重命名文件(目錄)

os.rename("oldname","newname") 文件或目錄都是使用這條命令

移動(dòng)文件(目錄)

shutil.move("oldpos","newpos")

刪除文件

os.remove("file")

刪除目錄

os.rmdir("dir")只能刪除空目錄

shutil.rmtree("dir") 空目錄、有內(nèi)容的目錄都可以刪

轉(zhuǎn)換目錄

os.chdir("path")換路徑

原文地址:http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html

總結(jié)

以上是生活随笔為你收集整理的python里的shell是什么_python中的shell操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。