最開始啟動一個進程:
1:p = create_multiprocess(target=getsmoketest,
args=[intranetip, username, password])
def create_multiprocess(target, args=()):
p = multiprocessing.Process(target=target, args=args)
p.start()
return p
2script_path = os.path.join(BASE_DIR, "common/smoketestreport/runsmoketestcases.sh")
args = ["sh", "-x", script_path, self.ip, self.user, self.password, BASE_DIR]
exit_value = 1
try:
process = subprocess.Popen(args, bufsize=1, stdout=subprocess.PIPE, close_fds=True, preexec_fn=os.setsid,
universal_newlines=True)
while process.poll() is None:
out_put_log = process.stdout.readline()
self.logger.output_shelllog_to_logger(out_put_log)
process.wait()
exit_value = process.returncode
except Exception, e:
self.logger.error(e.message)
if exit_value != 0:
err_msg = "[DevOps_Error]:Execute " + script_path + " error!!!"
self.logger.error(err_msg)
return self.EXCEPTION
return self.NORMAL
這樣算是開始執行腳本了,但是在shell腳本有個問題:
1腳本要識別這個Django框架路徑,也就是用到了BASE_DIR這個路徑
2在shell腳本開啟spawn的時候,最好設置set timeout -1這句話
代碼:
/usr/bin/expect <<EOF
set timeout -1
spawn ssh -o "StrictHostKeyChecking no" $user@$ip \[ \! -d $SMOKETESTCASESSAVEDIR/ \] && mkdir $SMOKETESTCASESSAVEDIR/
expect {
"$ip's password:" { send "$password\r"; exp_continue}
}
spawn scp -o "StrictHostKeyChecking no" $script_path/$sshFileName $user@$ip:$SMOKETESTCASESSAVEDIR
expect {
"$ip's password:" { send "$password\r"; exp_continue}
}
spawn scp -o "StrictHostKeyChecking no" $script_path/threadnameconfig.xml $user@$ip:$SMOKETESTCASESSAVEDIR
expect {
"$ip's password:" { send "$password\r"; exp_continue}
}
spawn ssh -o "StrictHostKeyChecking no" $user@$ip sh $SMOKETESTCASESSAVEDIR/$sshFileName
expect {
"$ip's password:" { send "$password\r"; exp_continue}
}
spawn scp -o "StrictHostKeyChecking no" $user@$ip:$SMOKETESTCASESSAVEDIR/checkprojectrun.log $SMOKETESTCASESSAVEDIR
expect {
"$ip's password:" { send "$password\r"; exp_continue}
}
EOF
后續再繼續深入研究