1:输出的是比 i的开平方 小 的最大整数
import math
if __name__ == '__main__':
print int(math.sqrt(48)) #6
if __name__ == '__main__':
print int(math.sqrt(48)) #6
2:在本地多线程序进行shell,返回结果保存到数组中
# -*- coding:utf-8 -*- #!/usr/bin/python import paramiko import threading import logging import logging.config import sys logging.config.fileConfig("logging.conf") logger = logging.getLogger("main") error_shell=['shutdown','reboot','halt','poweroff','init','kill'] class MyThread(object): def __init__(self, func_list=None): #所有线程函数的返回值汇总,如果最后为0,说明全部成功 self.ret_flag = [] self.func_list = func_list self.threads = [] def set_thread_func_list(self, func_list): """ @note: func_list是一个list,每个元素是一个dict,有func和args两个参数 """ self.func_list = func_list def ret_value(self): """ @note: 所有线程函数的返回值之和,如果为0那么表示所有函数执行成功 """ return self.ret_flag def trace_func(self, func, *args, **kwargs): """ @note:替代profile_func,新的跟踪线程返回值的函数,对真正执行的线程函数包一次函数,以获取返回值 """ ret = func(*args, **kwargs) self.ret_flag.append(ret) def start(self): """ @note: 启动多线程执行,并阻塞到结束 """ self.threads = [] self.ret_flag = [] for func_dict in self.func_list: if func_dict["args"]: new_arg_list = [] new_arg_list.append(func_dict["func"]) for arg in func_dict["args"]: new_arg_list.append(arg) new_arg_tuple = tuple(new_arg_list) t = threading.Thread(target=self.trace_func, args=new_arg_tuple) else: t = threading.Thread(target=self.trace_func, args=(func_dict["func"],)) self.threads.append(t) for thread_obj in self.threads: thread_obj.start() for thread_obj in self.threads: thread_obj.join() def ssh2(ip,username,passwd,cmd): Information=[]; try: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ip,22,username,passwd,timeout=5) for m in cmd: if(is_harmful_shell(m)): logger.error('not running harmful shell: %s on:%s'%(m,ip)) else: stdin, stdout, stderr = ssh.exec_command(m) # stdin.write("Y") #简单交互,输入 ‘Y’ out = stdout.readlines() #屏幕输出 for o in out: Information.append(o); logger.info('Performed on %s machine:'%(ip)+m); ssh.close() return Information; except : logger.error( '%s\tError\n'%(ip) +sys.exc_info()[0],sys.exc_info()[1]); def is_harmful_shell(cmd): for m in error_shell: if(cmd.lower().find(m.lower())!=-1): return True; return False; if __name__=='__main__': mt = MyThread() g_func_list = [] cmd = ['hostname','cat /proc/sys/kernel/random/uuid']#你要执行的命令列表 username = "root" #用户名 passwd = "root" #密码 threads = [] #多线程 print "Begin......" for i in range(129,131): ip = '192.168.197.'+str(i) g_func_list.append({"func":ssh2,"args":(ip,username,passwd,cmd)}) mt.set_thread_func_list(g_func_list) mt.start() for k, v in enumerate(mt.ret_value()): print k, v
日志
[loggers]
keys=root,main
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=fmt
[logger_root]
level=INFO
handlers=consoleHandler
[logger_main]
level=INFO
qualname=main
handlers=fileHandler
[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=fmt
args=(sys.stdout,)
[handler_fileHandler]
class=logging.handlers.RotatingFileHandler
level=INFO
formatter=fmt
args=('tst.log','a',20000,5,)
[formatter_fmt]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
keys=root,main
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=fmt
[logger_root]
level=INFO
handlers=consoleHandler
[logger_main]
level=INFO
qualname=main
handlers=fileHandler
[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=fmt
args=(sys.stdout,)
[handler_fileHandler]
class=logging.handlers.RotatingFileHandler
level=INFO
formatter=fmt
args=('tst.log','a',20000,5,)
[formatter_fmt]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
相关推荐
骰子,中国古代民间娱乐用来投掷的博具。骰子通常作为桌上游戏的小道具最常见的是六面骰,它是一个正立方体,上面分别有1-6个孔(或数字),其相对两面的数字之和必为7。中国的骰子习惯在一点和四点漆上红色。...
在Python中,实现随机点名的关键知识点包括: 1. **文件操作**:Python提供了简单易用的文件I/O接口,如`open()`函数用于打开文件,`readline()`或`readlines()`用于读取文件内容。在这个点名器中,程序会读取`name...
转载资源。用python2爬取4399好玩的游戏,值得学习和参考,也可以根据自己的想法改代码。
* 软关键字:Python 3.10 中引入了软关键字的概念,软关键字是指一些可以在 future 语句中使用的单词。 * 保留的标识符类:Python 中的一些标识符是保留的,例如 `__class__`、`__module__` 等。 字面值 Python 中...
4. **异常处理**:Python中的错误和异常处理机制,如`try/except`语句,以及如何自定义异常。 5. **面向对象编程**:类的定义、继承、封装、多态等概念,以及`__init__`、`__del__`等特殊方法的使用。 6. **文件...
《Python中文自然语言处理基础与实战》是一本深入浅出的教程,涵盖了使用Python进行NLP工作的各个方面。在本文中,我们将详细探讨该领域的重要概念、工具和技术,并结合实际案例来深化理解。 首先,让我们从Python...
python中文手册,适用于python入门学习,描述python基本使用。
Python 中英文混排时对齐 Python源码Python 中英文混排时对齐 Python源码Python 中英文混排时对齐 Python源码Python 中英文混排时对齐 Python源码Python 中英文混排时对齐 Python源码Python 中英文混排时对齐 Python...
这不仅可以帮助用户深入理解Python的语法和API,还可以通过学习笔记了解实际应用中的技巧和经验,对于提升Python技能和解决实际问题非常有帮助。无论你是初学者还是资深开发者,这个资源集合都是值得珍藏和参考的...
4. **异常处理**:Python 使用 try-except-finally 结构来处理程序中的错误,文档中详述了各种内置异常类型及其用法。 5. **标准库**:Python 有一个庞大的标准库,包括字符串操作、文件和I/O、网络通信、数据结构...
1. **Python语言基础**:书中详细讲解了Python的基础语法,包括变量、数据类型(如整型、浮点型、字符串、布尔型)、流程控制(条件语句、循环结构)、函数定义和调用,以及异常处理机制。 2. **面向对象编程**:...
2024最新版python中j_pythonj基础笔记2024最新版python中j_pythonj基础笔记2024最新版python中j_pythonj基础笔记2024最新版python中j_pythonj基础笔记2024最新版python中j_pythonj基础笔记2024最新版python中j_...
6. **extending.pdf**:扩展Python,讲述了如何使用C或C++编写Python扩展,以及如何将C/C++库集成到Python程序中,是深入学习Python底层原理的重要资料。 7. **using.pdf**:使用Python,可能包含Python的配置、...
Python 如何批量替换Word文档中的指定内容(包括页眉)Python源码Python 如何批量替换Word文档中的指定内容(包括页眉)Python源码Python 如何批量替换Word文档中的指定内容(包括页眉)Python源码Python 如何批量...
2. **字典有序性**:自Python 3.6起,字典就保持插入顺序,而在Python 3.7中,这一特性被正式纳入到语言规范中。这意味着字典现在是有序的容器,这对于需要保持键顺序的场景非常有用。 3. **类型注解(Type ...
1. 文件操作:了解Python中文件的读写操作,包括读取jsonline格式的文件。 2. 日期操作:了解Python中日期的操作,包括判断一天是这一年的第几天。 3. 列表操作:了解Python中列表的操作,包括排序、反转、删除重复...
尽管如此,Python 3毕竟是大势所趋,如果您暂时还没想到要做什么行业领域的应用开发,或者仅仅是为了 尝试一种新的、好玩的语言,那么请毫不犹豫地选择Python 3.x系列的最高版本(目前是Python 3.4.3)。...
在描述中,博主指出他们使用的Python版本是3.8,这意味着这个方法可能适用于Python 3.8版本。 实现IDLE中文界面的步骤如下: 1. 首先,你需要找到一个包含中文语言包的Python安装。这通常可以在Python的国际化版本...
使用DJANGO框架的PYTHON中的TODO列表使用DJANGO框架的PYTHON中的TODO列表使用DJANGO框架的PYTHON中的TODO列表使用DJANGO框架的PYTHON中的TODO列表使用DJANGO框架的PYTHON中的TODO列表使用DJANGO框架的PYTHON中的TODO...