python运维工具_Ops运维工具

python文件支持中文

# -*- coding: UTF-8 -*-

另类字典访问方法

class AttributeDict(dict):

def __getattr__(self, attr):

try:

return self[attr]

except:

return None

def __setattr__(self, attr, value):

self[attr] = value

ad = AttributeDict({"aa":1})

print ad.aa

执行shell命令

from subprocess import Popen, PIPE

def run_cmd(cmd):

#Popen call wrapper.return (code, stdout, stderr)

child = Popen(cmd, stdin = PIPE, stdout = PIPE, stderr = PIPE, shell = True)

out, err = child.communicate()

ret = child.wait()

return (ret, out, err)

获取当前python脚本文件所在路径

import os

os.path.split(os.path.realpath(__file__))[0]

json模块 import的问题

try :

import json

except :

import simplejson as json

使用json工具格式化json

#python 2.7以下

echo '{"hello":1}' | python -m simplejson.tool

#python 2.7及以上

echo '{"hello":1}' | python -m json.tool

获取URL资源

import urllib2

response = urllib2.urlopen('http://www.opstool.com/')

html = response.read()

print html

关于main

if __name__=='__main__':

指定格式的日期

import datetime

yesterday =datetime.date.today() -datetime.timedelta(days=1)

pt = yesterday.strftime("%Y%m%d")

print pt

timestamp转化为日期时间

timeStamp = 1437122504

timeArray = time.localtime(timeStamp)

otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)

使用date parser 从字符串产生datetime变量

import time

from dateutil import parser

dt = parser.parse("2017-11-09 03:23:56.345024 +0800")

time.mktime(dt.timetuple()) + dt.microsecond

日期时间字符串 转化为timestamp

int(time.mktime( time.strptime("2015-07-21 10:23:00", "%Y-%m-%d %H:%M:%S")))

获得当前时间

import datetime

datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

使用option

import getopt

try:

opts, args = getopt.getopt(sys.argv[1:], "t:")

for op, value in opts:

if op == '-t':

gctime = int(value)

except getopt.GetoptError:

sys.exit(1)

使用logger

import os

import logging

def get_logger(logger_name):

# 创建一个logger

logger = logging.getLogger(logger_name)

logger.setLevel(logging.DEBUG)

# 创建一个handler,用于写入日志文件

fh = logging.FileHandler(os.path.split(os.path.realpath(__file__))[0]+"/"+logger_name+".log")

fh.setLevel(logging.DEBUG)

# 再创建一个handler,用于输出到控制台

ch = logging.StreamHandler()

ch.setLevel(logging.DEBUG)

# 定义handler的输出格式

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

fh.setFormatter(formatter)

ch.setFormatter(formatter)

# 给logger添加handler

logger.addHandler(fh)

logger.addHandler(ch)

return logger

logger=get_logger("mylogger")

实现deamon运行

import sys

import os

def daemonize (stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):

# Perform first fork.

try:

pid = os.fork( )

if pid > 0:

sys.exit(0) # Exit first parent.

except OSError, e:

sys.stderr.write("fork #1 failed: (%d) %sn" % (e.errno, e.strerror))

sys.exit(1)

# Decouple from parent environment.

os.chdir("/")

os.umask(0)

os.setsid( )

# Perform second fork.

try:

pid = os.fork( )

if pid > 0:

sys.exit(0) # Exit second parent.

except OSError, e:

sys.stderr.write("fork #2 failed: (%d) %sn" % (e.errno, e.strerror))

sys.exit(1)

# The process is now daemonized, redirect standard file descriptors.

for f in sys.stdout, sys.stderr: f.flush( )

si = file(stdin, 'r')

so = file(stdout, 'a+')

se = file(stderr, 'a+', 0)

os.dup2(si.fileno( ), sys.stdin.fileno( ))

os.dup2(so.fileno( ), sys.stdout.fileno( ))

os.dup2(se.fileno( ), sys.stderr.fileno( ))

#进入后台

daemonize()

简单HTTP服务器示例

import urllib

from cgi import parse_header, parse_multipart

from urlparse import parse_qs

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

class TestHTTPHandler(BaseHTTPRequestHandler):

def do_GET(self):

buf="Hello World!"

self.protocal_version = "HTTP/1.1"

self.send_response(200)

self.end_headers()

self.wfile.write(buf)

def do_POST(self):

self.protocal_version = "HTTP/1.1"

self.send_response(200)

self.end_headers()

buf = self._parse_POST()

self.wfile.write(buf['postvar'])

def _parse_POST(self):

ctype, pdict = parse_header(self.headers['content-type'])

if ctype == 'multipart/form-data':

postvars = parse_multipart(self.rfile, pdict)

elif ctype == 'application/x-www-form-urlencoded':

length = int(self.headers['content-length'])

postvars = parse_qs(

self.rfile.read(length),

keep_blank_values=1)

else:

postvars = {}

return postvars

def start_server():

http_server = HTTPServer(("127.0.0.1", 8088), TestHTTPHandler)

http_server.serve_forever()

start_server()

一种函数调用方法

#!/bin/env python

def mytest():

print "hello"

m={

'myfunction' : 'mytest'

}

globals()[m['myfunction']]()

print globals()

logging的日志级别大小关系

日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值