用Python編寫指令碼進行軟體自動安裝配置

2021-06-12 14:30:10 字數 4342 閱讀 1584

更新: 2010-04-11

字型:【大 中 小】

測試機器:10.10.33.119;os:redhat linux4

測試路徑:/home/sonky

【指令碼1】:使用exec*()系列函式,在python裡面,os.exec*()系列命令會完全代替python直譯器,如果執行os.exec*()函式,則python直譯器和指令碼將在os.exec*()執行之後終止。如果如果想繼續執行,必須

使用os.fork()函式來啟動乙個新子程序。【建立.py檔案後,用chmoda+u *.py命令修改檔案屬性後,./*.py可以執行指令碼】

#! /usr/bin/envpython

importos,glob

cmd = ['/bin/tar',

'-x',

'-z',

'-f',

]tar_file_list =glob.glob('*.tar.gz')

for tar_file intar_file_list:

if os.fork():

os.wait()

else:

os.execv(cmd[0], cmd + [tar_file,])

print "installmpich2..."

configure =['./configure','--prefix=/home/sonky/mpich2']

make =['/usr/bin/make']

install =['/usr/bin/make','install']

os.chdir('/home/sonky/mpich2-1.0.6')

i=os.fork()

if i!=0:

os.wait()

n=os.fork()

ifn!=0:

os.wait()

os.execv(install[0],install)

else:

os.execv(make[0],make)

else:

os.execv(configure[0],configure)

【指令碼2-mpich.py】:在linux(unix),可以使用os.spawn*()系列函式,該函式功能類似於os.exec*(),

但它們可以通過引數(p_wait,p_nowait等)來實現是否繼續執行還是終止指令碼,其中sleep3只是為了除錯的時候暫停一下可以看到那一步已經完成。

#!/usr/bin/python

import os,glob

tar = ['/bin/tar','-xzf',]

print 「*****=unzip sourcefile*****=」

tar_file_list =glob.glob('*.tar.gz')

for tar_file intar_file_list:

os.spawnv(os.p_wait,tar[0], tar + [tar_file,])

print "*****=installmpich*****="

sleep =['/bin/sleep','3']

os.spawnv(os.p_wait,sleep[0],sleep)

configure =['./configure','--prefix=/home/sonky/mpich2']

make =['/usr/bin/make']

install =['/usr/bin/make','install']

os.chdir('/home/sonky/mpich2-1.0.6')

os.spawnv(os.p_wait,configure[0],configure)

print "step1:configuredone!"

os.spawnv(os.p_wait,sleep[0],sleep)

os.spawnv(os.p_wait,make[0],make)

print "step2:makedone!"

os.spawnv(os.p_wait,sleep[0],sleep)

os.spawnv(os.p_wait,install[0],install)

print "step3:installdone!"

【指令碼3】更加完善的指令碼,加入配置檔案功能

#! /usr/bin/python

from os.path import walk, join, normpath

from os import chdir

import os,time

def install(sourcefile, dirname,installdir):

print "installing" ,sourcefile

untarcmd = [ '/bin/tar', '-x', '-z', '-f' ]

workdir = dirname + '/' + sourcefile[:-7]

configurecmd = ['./configure', '--prefix=' + installdir]

makecmd = ['/usr/bin/make']

installcmd = ['/usr/bin/make', 'install']

os.chdir(path)

print "*****=unzip source file*****="

os.spawnv(os.p_wait, untarcmd[0], untarcmd + [sourcefile])

print "unzip done!"

time.sleep(2)

print "*****=install starting*****="

os.chdir(workdir)

os.spawnv(os.p_wait,configurecmd[0],configurecmd)

print "step1:configure done!"

time.sleep(2)

os.spawnv(os.p_wait,makecmd[0],makecmd)

print "step2:make done!"

time.sleep(2)

os.spawnv(os.p_wait,installcmd[0],installcmd)

print "step3:install done!"

def scan(arg,dirname, names):

for sourcefile in names:

if (sourcefile[:n]==installfile) and (sourcefile[-7:] == ".tar.gz"or sourcefile[-8:] == ".tar.bz2"):

print sourcefile,"will be installed"

install(sourcefile, dirname,installdir)

print sourcefile,"has been installed"

def configpath(cfgfile, installdir):

f = open(cfgfile, 'r+')

f.seek(0, 2)

f.write('\n' + 'export path = ' + installdir + '/bin:$path')

f.seek(0)

f.close()

print 'step4: path edit done'

def confignodes(nodefile):

f = open(nodefile, 'r+')

f.seek(0, 2)

for i in range(1,5):

f.write('\n' +'oscarnode'+str(i)+'.stu')    #............hostname

f.seek(0)

f.close

print 'step5:mpi nodes configuration done'

if __name__== "__main__":

path='/home/sonky'

installfile = 'mpich'

n = 5

installdir = '/home/sonky/'+installfile

walk(path, scan, 0)

cfgfile = '/home/dell/.bashrc'

configpath(cfgfile, installdir)

nodefile = installdir+'/share/machines.linux'

confignodes(nodefile)

!!!問題:為什麼python中要有這麼多功能類似的函式?有什麼區別?繼續學習。

用python編寫串列埠測試指令碼

用python編寫串列埠測試指令碼 最近接到了乙個測試硬體的內容,有大概十臺左右,給了乙個串列埠測試的文件,讓我來測硬體,測試的前兩天使用的手工測試,實在有點麻煩,晚上加班寫了個指令碼來簡單的自動執行一下。import serial.tools.list ports import time impo...

用ant編寫自動編譯指令碼

第一步 ant的配置 1 在ant安裝之前需要安裝好jdk,並配置好j a home 2 新建環境變數ant home 值為ant的主目錄 3 在path中配置 ant home bin 4 在classpath中配置 ant home lib 5 配置完成之後,開啟命令列,輸入ant,當出現 bu...

軟體需求分析 軟體用例編寫

測試需求主要解決 測什麼 的問題,一般來自需求規格說明書中的原始需求。測試需求應該全部覆蓋已定義的業務流程,以及功能和非功能方面的需求。只有明確了測試需求,才知道 怎麼去測試!什麼時候開始測試!要多少人測試!在什麼環境上測試!測試需求分析的目的 根據需求文件提取測試點,根據測試點來編寫測試用例。測試...