程序應用
1.遠端執行命令
#!/usr/src/python# -*- coding:utf-8 -*-
import paramiko,time,re
from multiprocessing import process
import configparser
def cmd_remote(hostname,port,username,pwd,cmd):
ssh = paramiko.sshclient()
ssh.set_missing_host_key_policy(paramiko.autoaddpolicy())
ssh.connect(hostname,port,username,pwd)
stdin, stdout, stderr = ssh.exec_command(cmd)
res=stdout.read()
print('***************===='+hostname+'********************===\n'+res.decode('gbk'))
ssh.close();
if __name__ == '__main__':
conf=configparser.configparser()
conf.read("db\hostinfo")
sec_list=conf.sections()
while true:
cmd=input('prompt>>').strip()
server_group = re.findall(r'-g(.+?)-', cmd)
host_list = re.findall(r'-h(.+?)-', cmd)
cmd_list = re.findall(r'"(.+?)"', cmd)
if not cmd:continue
elif cmd=='exit':
break
elif re.match(r'^batch_run',cmd) and server_group and cmd_list:
res = server_group[0].strip()
single_group=res.split(',')
exe_cmd = cmd_list[0].strip()
for item in single_group:
opt=conf.options(item)
p_list=
for host in opt:
single_host = host_list[0].strip()
if host not in single_host:continue
host_dict=eval(conf.get(item,host))
hostname=host_dict['ip']
port=int(host_dict['port'])
username=host_dict['username']
pwd=host_dict['pwd']
p=process(target=cmd_remote,args=(hostname,port,username,pwd,exe_cmd))
for pro in p_list:
pro.start()
for pro in p_list:
pro.join()
else:
print('命令不對哦!只能是run和scp')
# batch_run -h h1,h2 -g mysql,web -cmd "df -h"
# batch_scp -h h1,h2 -g mysql,web -action put -local test.py -remote /tmp/
2.ftp上傳功能
#!/usr/src/python# -*- coding:utf-8 -*-
import paramiko,time,re
from multiprocessing import process
import configparser
def cmd_scp(hostname,port,username,pwd,file_name,remote_path):
ssh = paramiko.sshclient()
ssh.set_missing_host_key_policy(paramiko.autoaddpolicy())
ssh.connect(hostname,port,username,pwd)
sftp = paramiko.sftpclient.from_transport(ssh.get_transport())
sftp = ssh.open_sftp()
try:
sftp.put(file_name, remote_path)
print('ok!')
except filenotfounderror:
print('本地目錄下沒有該檔案,請上傳已存在的檔案')
pass
# res=stdout.read()
# print('***************===='+hostname+'********************===\n'+res.decode('gbk'))
ssh.close();
if __name__ == '__main__':
conf=configparser.configparser()
conf.read("db\hostinfo")
sec_list=conf.sections()
while true:
cmd=input('prompt>>').strip()
server_group = re.findall(r'-g(.+?)-', cmd)
host_list = re.findall(r'-h(.+?)-', cmd)
remote_path = cmd.split(' ')[-1]
f_name = re.findall(r'-local(.+?)-remote', cmd)
oper = re.findall(r'-action(.+?)-local', cmd)
print(host_list)
if not cmd:continue
elif cmd=='exit':
break
elif re.match(r'^batch_scp',cmd) and server_group and f_name and re.search(r'/\s.*/', remote_path):
res = server_group[0].strip()
single_group=res.split(',')
file_name=f_name[0].strip()
print(file_name)
for item in single_group:
opt=conf.options(item)
p_list=
for host in opt:
single_host = host_list[0].strip()
if host not in single_host:continue
host_dict=eval(conf.get(item,host))
hostname=host_dict['ip']
port=int(host_dict['port'])
username=host_dict['username']
pwd=host_dict['pwd']
p=process(target=cmd_scp,args=(hostname,port,username,pwd,file_name,remote_path+file_name))
for pro in p_list:
pro.start()
for pro in p_list:
pro.join()
else:
print('命令不對哦!只能是run和scp')
#example
#batch_scp -h h1 -g mysql,web -action put -local exe_com.py -remote /tmp/
3.產生配置檔案
#!/usr/src/python# -*- coding:utf-8 -*-
# 新增主機組及所屬主機
import configparser,json
conf=configparser.configparser()
conf.read("db\hostinfo")
while true:
sec=input('section:')
if sec=='exit':break
list_sec=conf.sections()
if sec not in list_sec:
conf.add_section(sec)
hostname=input('hostname:')
ip = input('ip:')
port = input('port:')
username=input('username:')
pwd = input('pwd:')
host_dic=
json_res=json.dumps(host_dic)
conf.set(sec,hostname,json_res)
conf.write(open('db\hostinfo', 'w'))
生產者與消費者模型
先介紹幾個函式 生產消費者模型 二者共享資料value,這裡,生產者是producter,消費者是consumer。生產者負責放物品到value中,消費者使用wait 等待生產者的通知。當得到通知後,消費者取出物品,並且用notify 通知生產者,可以再放下一批物品。例項 package cn.ed...
生產者與消費者模型
如圖 一共有三種關係 生產者與生產者的互斥關係,消費者與消費者的互斥關係,生產者與消費者的互斥且同步關係。兩種角色 生產者 執行緒 與消費者 執行緒 乙個交易場所 倉庫 一段記憶體空間,且可存可取 二 基於單向鍊錶的生產者消費者模型 1 我們這裡用乙個單鏈表當做那段共享記憶體,簡單實現生產者消費者模...
生產者與消費者模型
生產者 消費者模型描述的是有一塊緩衝區作為倉庫,生產者可將產品放入倉庫,消費者可以從倉庫中取出產品,模型圖如下所示 1 三種關係 三種關係分別指的是 消費者和消費者,生產者和生產者,生產者和消費者 其中消費者和消費者,生產者和生產者之間都屬於競爭關係,生產者和消費者之間的關係相當於是一種食物鏈之間的...