国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

日常整理python執(zhí)行系統(tǒng)命令的常見方法(全)

2019-11-25 17:03:33
字體:
供稿:網(wǎng)友

具體內(nèi)容如下:

1 os.system

例如 ipython中運(yùn)行如下命令,返回運(yùn)行狀態(tài)status

os.system('cat /etc/passwdqc.conf')
min=disabled,24,11,8,7
max=40
passphrase=3
match=4
similar=deny
random=47
enforce=everyone
retry=3
Out[6]: 0

2 os.popen()

popen(command [, mode='r' [, bufsize]]) -> pipe
Open a pipe to/from a command returning a file object.

運(yùn)行返回結(jié)果

In [20]: output = os.popen('cat /proc/cpuinfo')
In [21]: lineLen = []
In [22]: for line in output.readlines():
    lineLen.append(len(line))
   ....:    
In [23]: line
line     lineLen 
In [23]: lineLen
Out[23]:
[14,
 25,
...

3 如何同時(shí)返回結(jié)果和運(yùn)行狀態(tài),commands模塊:

#String form: <module 'commands' from '/usr/lib64/python2.7/commands.pyc'>File: /usr/lib64/python2.7/commands.pyDocstring:Execute shell commands via os.popen() and return status, output.Interface summary:import commandsouttext = commands.getoutput(cmd)(exitstatus, outtext) = commands.getstatusoutput(cmd)outtext = commands.getstatus(file) # returns output of "ls -ld file"A trailing newline is removed from the output string.Encapsulates the basic operation:pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')text = pipe.read()sts = pipe.close()

commands示例如下:

In [24]: (status, output) = commands.getstatusoutput('cat /proc/cpuinfo')
In [25]: status
Out[25]: 0
In [26]: len(output)
Out[26]: 3859

4 使用模塊subprocess

ipython 中運(yùn)行"?subprocess"可以發(fā)現(xiàn)subprocess是python用來替換os.popen()等管道操作命令的新模塊

A more real-world example would look like this:

try:  retcode = call("mycmd" + " myarg", shell=True)  if retcode < 0:    print >>sys.stderr, "Child was terminated by signal", -retcode  else:    print >>sys.stderr, "Child returned", retcodeexcept OSError, e:  print >>sys.stderr, "Execution failed:", e

相對(duì)于上面幾種方式,subprocess便于控制和監(jiān)控進(jìn)程運(yùn)行結(jié)果,subprocess提供多種函數(shù)便于應(yīng)對(duì)父進(jìn)程對(duì)子進(jìn)程不同要求:

4.1.1 subprocess.call()

父進(jìn)程父進(jìn)程等待子進(jìn)程完成,返回exit code

4.1.2 subprocess.check_call()

父進(jìn)程等待子進(jìn)程完成,返回0,如果returncode不為0,則舉出錯(cuò)誤subprocess.CalledProcessError,該對(duì)象包含有returncode屬性,可用try...except...來檢查

4.1.3 subprocess.check_output()

父進(jìn)程等待子進(jìn)程完成

返回子進(jìn)程向標(biāo)準(zhǔn)輸出的輸出結(jié)果

檢查退出信息,如果returncode不為0,則舉出錯(cuò)誤subprocess.CalledProcessError,該對(duì)象包含有returncode屬性和output屬性,output屬性為標(biāo)準(zhǔn)輸出的輸出結(jié)果,可用try...except...來檢查

例如:

In [32]: out = subprocess.call("ls -l", shell=True)
total 42244
-rw-rw-r--.  1 *** ***     366 May 26 09:10 ChangeLog

4.2.1

上面三個(gè)函數(shù)都是源于Popen()函數(shù)的wapper(封裝),如果需要更加個(gè)性化應(yīng)用,那么就需要使用popen()函數(shù)

Popen對(duì)象創(chuàng)建后,主程序不會(huì)自動(dòng)等待子進(jìn)程完成。我們必須調(diào)用對(duì)象的wait()方法,父進(jìn)程才會(huì)等待 (也就是阻塞block)

[wenwt@localhost syntax]$ rm subprocess.pyc [wenwt@localhost syntax]$ python process.py parent process[wenwt@localhost syntax]$ PING www.google.com (173.194.219.99) 56(84) bytes of data.^C[wenwt@localhost syntax]$ --- www.google.com ping statistics ---5 packets transmitted, 0 received, 100% packet loss, time 3999ms

加上wait方法:

[wenwt@localhost syntax]$ python process.py PING www.google.com (173.194.219.103) 56(84) bytes of data.--- www.google.com ping statistics ---5 packets transmitted, 0 received, 100% packet loss, time 3999msparent process

以上內(nèi)容就是本文的全部敘述,希望大家喜歡。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广宗县| 咸宁市| 延津县| 丰城市| 德钦县| 全椒县| 临颍县| 葫芦岛市| 德庆县| 星座| 金坛市| 定兴县| 壤塘县| 黄龙县| 阿勒泰市| 堆龙德庆县| 天水市| 康保县| 垣曲县| 新宾| 南川市| 安丘市| 富蕴县| 香河县| 富平县| 长治市| 四会市| 灵璧县| 高安市| 盐山县| 浦城县| 长泰县| 翁源县| 济阳县| 扎鲁特旗| 桑植县| 波密县| 亳州市| 德保县| 巫山县| 安阳市|