-- coding: utf-8 --

“””
@author: shanxc
“””

import os
import re
import codecs
import subprocess,shutil

CodePath = os.path.dirname(os.path.abspath(file))
print CodePath

def netUserCont(connectinfo):
ip, username, passwd, sharename,diskname = connectinfo.encode(‘gbk’).split(‘,’)
wf = codecs.open(os.path.join(CodePath, ‘getnet.bat’), ‘w+’, encoding=’gbk’)
wf.write(‘:设置映射盘\n’.decode(‘utf-8’))
wf.write(‘net use /del /y\n’.decode(‘utf-8’))
zhi = ‘net use {diskname}: \\{ip}\{sharename} “{passwd}” /user:”{username}”‘.format(diskname=diskname,ip=ip, sharename=sharename,
passwd=passwd, username=username)
print zhi
wf.write(zhi.decode(‘gbk’) + ‘\n’.decode(‘gbk’))
wf.write(‘exit’.decode(‘gbk’))
wf.close()

runCmd(‘getnet.bat’, CodePath)
os.remove(os.path.join(CodePath, ‘getnet.bat’))


def NetCopyFiles(srcpath,despath):
for root, dirs, files in os.walk(srcpath):
desroot = os.path.join(despath, root.lstrip(srcpath))
# print 44,desroot
for dir in dirs:
if not os.path.exists(os.path.join(des_root, dir)):
os.mkdir(os.path.join(des_root, dir))
for file in files:
if os.path.exists(os.path.join(des_root, file)):
os.remove(os.path.join(des_root, file))
print 22, os.path.join(root, file), os.path.join(des_root, file)
shutil.copyfile(os.path.join(root, file), os.path.join(des_root, file))


def schtasksCreate(ip, name, pwd, sc, tn, tr):
# cmd = r”schtasks /create /S “ + ip + r” /u “ + name + r” /p “ + pwd + r” /sc “ + sc + r” /f “ + r”/st “ + st + r” /ru “ + r””” “”\Administrator /RL HIGHEST /tr “”” + tr + r” /tn “ + tn
cmd = r”schtasks /create /S “ + ip + r” /u “ + name + r” /p “ + pwd + r” /sc “ + sc + r” /f “ + r” /ru “ + r””” “”\Administrator /RL HIGHEST /tr “”” + tr + r” /tn “ + tn

print(cmd)
runCmd(cmd,’.’)


def runschtasks(ip, name, pwd, tn):
cmd = r”schtasks /run /S “ + ip + r” /u “ + name + r” /p “ + pwd + r” /tn “ + tn
runCmd(cmd,’.’)


def runCmd(args,cwd):

p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True,
cwd=cwd)
datas = []
while True:
status = p.poll()
# print ‘status…’,status
line = p.stdout.readline()
# print line
if (line.__len
() > 0):
datas.append(line)
if type(line) == unicode:
print line.encode(‘gbk’)
else:
print(line)
if status == 2 or status == -15 or status == 0 or status == 1: # 判断子进程是否结束
break
return datas

def GenerateBats(path):
kcbp_start=os.path.join(path,’kcbp_start.bat’)
kcbp_stop = os.path.join(path, ‘kcbp_stop.bat’)
wf=codecs.open(kcbp_start,’w+’,encoding=’gbk’)
wf.write(r’D:\kcbp\bin\KCBP.exe start’.decode(‘utf-8’))
wf.close()
wf = codecs.open(kcbp_stop, ‘w+’, encoding=’gbk’)
wf.write(r’D:\kcbp\bin\KCBP.exe stop’.decode(‘utf-8’))
wf.close()

def checkOS(ip):
try:
cmd = “ping -n 4 “ + ip
results = os.popen(cmd).read()
results = re.search(“TTL=.
“, results, re.M | re.I).group()
ttl = re.compile(r’\d+’).findall(results)
ttl = int(ttl[0])
if ttl >= 20 and ttl <= 80:
print(“this is linux !”)
return “linux”
else:
print(“this is windows!”)
return “windows”
except:
print(“网络错误!”)
return False
print(results)


def winDeploy(connectinfo):
# 建立连接
netUserCont(‘10.202.80.90,administrator,Zqcp.8888,kcbp,H’)
ip, name, pwd, sharename, diskname = connectinfo.encode(‘gbk’).split(‘,’)
# copy采集程序
srcpath = r”D:\code\svn\fs20\Bin3\KFMS_2.2.5.0_upd099(B)_ora\KCBP\Bin”
despath = r”H:\bin”
NetCopyFiles(srcpath, despath)
GenerateBats(despath)
# 创建计划任务
sc = “ONSTART” # 执行频率
# st = “16:42:00” # 执行时间
tn = “kcbp_start” # 任务名称
stop_tn=”kcbp_stop”
tr = r”D:\kcbp\bin\kcbp_start.bat” # 要执行的命令
stop_tr = r”D:\kcbp\bin\kcbp_stop.bat” # 要执行的命令
schtasksCreate(ip, name, pwd, sc, tn, tr)
schtasksCreate(ip, name, pwd, sc, stop_tn, stop_tr)
# 启动任务
runschtasks(ip, name, pwd, tn)
# runschtasks(ip, name, pwd, stop_tn)


if __name
== ‘__main
‘:

winDeploy(‘10.202.80.90,administrator,Zqcp.8888,kcbp,H’)