django中執行shell腳本


最開始啟動一個進程:

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
后續再繼續深入研究



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM