Python [6] IT资产管理(下)

简介:

上一篇博客聊到以下内容

1、安装django

2、部署工程和应用

3、修改、添加工程和应用配置文件并能成功url访问

4、Python脚本采集主机信息

5、通过post方式传送搜集的信息到服务器端

6、主机分组

如需更详细的了解,请参考http://467754239.blog.51cto.com/4878013/1616551


在这篇博客中,我们针对上篇博客中的重点部分做阐述,如何多钟方式实现第5步:

5、通过post方式传送搜集的信息到服务器端


一、Python序列化

1、序列化是什么

序列化:内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人。你会怎么做?嗯, 这取决于你想要怎么保存,怎么重用,发送给谁。很多游戏允许你在退出的时候保存进度,然后你再次启动的时候回到上次退出的地方。(实际上, 很多非游戏程序也会这么干。) 在这个情况下, 一个捕获了当前进度的数据结构需要在你退出的时候保存到磁盘上,接着在你重新启动的时候从磁盘上加载进来。这个数据只会被创建它的程序使用,不会发送到网 络上,也不会被其它程序读取。因此,互操作的问题被限制在保证新版本的程序能够读取以前版本的程序创建的数据。


2、实现序列化的方法

pickle(python语言编写)、cPickle(c语言编写)

JSON

Shelve

YAML


3、pickle和JSON的基本使用

pickle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
(1)pickle将字典序列化存储到文本文件中
[root@localhost  test ] # pwd
/tmp/test
[root@localhost  test ] # ls
1_pickle_dump.py  2_pickle_load.py
[root@localhost  test ] # python 1_pickle_dump.py 
[root@localhost  test ] # ls
1_pickle_dump.py  2_pickle_load.py  dump.txt     #存储到磁盘的文件中
[root@localhost  test ] # cat dump.txt 
(dp0
S 'age'
p1
S '25'
p2
sS 'tel'
p3
S '132600*****'
p4
sS 'name'
p5
S 'ZhengYanSheng'
p6
s.
[root@localhost  test ] # cat 1_pickle_dump.py 
#!/usr/bin/env python
 
import  pickle
 
d = { 'name' : 'ZhengYanSheng' , 'age' : '25' , 'tel' : '132600*****' }
with  open ( '/tmp/test/dump.txt' , 'w' ) as fd:
     pickle.dump(d,fd)
     
(2)pickle加载文本文件中的内容并生成一个新的字典
[root@localhost  test ] # pwd
/tmp/test
[root@localhost  test ] # ls
1_pickle_dump.py  2_pickle_load.py  dump.txt
[root@localhost  test ] # python 2_pickle_load.py 
{ 'age' '25' 'tel' '132600*****' 'name' 'ZhengYanSheng' }     #生成一个新的字典
[root@localhost  test ] # cat 2_pickle_load.py 
#!/usr/bin/env python
 
import  pickle
 
with  open ( '/tmp/test/dump.txt' , 'r' ) as fd:
     d1 = pickle.load(fd)
print d1

json

这次我们直接在Ipython的交互式中进行操作json的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(1)json的导出
[root@localhost ~] # ipython
Python 2.6.6 (r266:84292, Feb 22 2013, 00:00:18) 
Type  "copyright" "credits"  or  "license"  for  more  information.
 
IPython 1.2.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about  'object' , use  'object??'  for  extra details.
 
In [1]:  import  json
 
In [2]: d = { 'a' : 'a' , 'b' :235, 'c' :( 'c1' , 'c2' ), 'd' : 'True' , 'e' : 'None' }
 
In [3]: d
Out[3]: { 'a' 'a' 'b' : 235,  'c' : ( 'c1' 'c2' ),  'd' 'True' 'e' 'None' }
 
In [4]: with  open ( '/tmp/test/d.json' , 'w' ) as fd:    
    ...:     json.dump(d,fd)     #写入到文件中
    ...:  
Do you really want to  exit  ([y] /n )? 
[root@localhost ~] # cat /tmp/test/d.json     #在shell模式下查看写入的文件内容
{ "a" "a" "c" : [ "c1" "c2" ],  "b" : 235,  "e" "None" "d" "True" }
 
 
(2)json的载入
[root@localhost ~] # ipython
Python 2.6.6 (r266:84292, Feb 22 2013, 00:00:18) 
Type  "copyright" "credits"  or  "license"  for  more  information.
 
IPython 1.2.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about  'object' , use  'object??'  for  extra details.
 
In [1]:  import  json
 
In [2]: with  open ( '/tmp/test/d.json' , 'r' ) as fd:
    ...:      dd  = json.load(fd)
 
In [3]: print  dd
{u 'a' : u 'a' , u 'c' : [u 'c1' , u 'c2' ], u 'b' : 235, u 'e' : u 'None' , u 'd' : u 'True' }


二、多种以POST方式传参的列子

1、pickle的方式

(1)修改views.py文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@localhost Simplecmdb]# cat hostinfo/views.py  
from django.shortcuts import render
from django.http import HttpResponse
from hostinfo.models import Host
import pickle    #导入pickle模块
  
# Create your views here.
def index(req):
     if  req.method ==  'POST' :
     pick_obj = pickle.loads(req.body) #接受客户端的传参是一个字典   
         hostname = pick_obj[ 'hostname' ]    #既然是一个字典,那么我们就一个变量变量的接收
         ip = pick_obj[ 'ip' ]
         osversion = pick_obj[ 'osversion' ]
         memory = pick_obj[ 'memory' ]
         disk = pick_obj[ 'disk' ]
         vendor_id = pick_obj[ 'vendor_id' ]
         model_name = pick_obj[ 'model_name' ]
         cpu_core = pick_obj[ 'cpu_core' ]
         product = pick_obj[ 'product' ]
         Manufacturer = pick_obj[ 'Manufacturer' ]
         sn = pick_obj[ 'sn' ]
  
     try :
         host = Host.objects.get(hostname=hostname)
     except:
             host = Host()
         host.hostname = hostname
         host.ip = ip
         host.osversion = osversion
         host.memory = memory
         host.disk = disk
         host.vendor_id = vendor_id
         host.model_name = model_name
         host.cpu_core = cpu_core
         host.product = product
         host.Manufacturer = Manufacturer
         host.sn = sn    
         host.save()
         return  HttpResponse( 'ok' )
     else :
         return  HttpResponse( 'no data' )

(2)修改搜集主机信息脚本(需要修改一个地方)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
[root@localhost Simplecmdb] # vim post_hostinfo.py 
  
#!/usr/bin/env python
#coding:utf8
#author:Allentuns
#time:2015-02-14
  
from subprocess  import  Popen,PIPE
import  urllib,urllib2
import  pickle
import  json
import  re
  
###[hostname message]#####
def get_HostnameInfo( file ):
     with  open ( file , 'r' ) as fd:
         data = fd. read (). split ( '\n' )
         for  line  in  data:
             if  line.startswith( 'HOSTNAME' ):
                 hostname  = line. split ( '=' )[1]
                 break
     return  hostname
  
#####[ipaddr message]#####
def get_Ipaddr():
     P = Popen([ 'ifconfig' ],stdout=PIPE)
     data = P.stdout. read ()
     list = []
     str =  ''
     option = False
     lines = data. split ( '\n' )
     for  line  in  lines:
         if  not line.startswith( ' ' ):
             list.append(str)
             str = line
         else :
             str += line
     while  True:
         if  ''  in  list:
             list.remove( '' )
         else :
             break
     r_devname = re.compile( '(eth\d*|lo)' )
     r_mac = re.compile( 'HWaddr\s([A-F0-9:]{17})' )
     r_ip = re.compile( 'addr:([\d.]{7,15})' )
     for  line  in  list:
         devname = r_devname.findall(line)
         mac = r_mac.findall(line)
         ip = r_ip.findall(line)
         if  mac:
             return   ip[0]
  
#####[osversion message]#####
def get_OsVerion( file ):
     with  open ( file ) as fd:
         lines = fd.readlines()
         os_version = lines[0][:-8]
         return  os_version
  
#####[memory message]#####
def get_MemoryInfo( file ):
    with  open ( file ) as fd:
         data_list = fd. read (). split ( '\n' )
         MemTotal_line = data_list[0]
         Memory_K = MemTotal_line. split ()[1]
         Memory_G = float(Memory_K) /1000/1000
         Memory_G2 =  '%.2f'  % Memory_G
         memory = Memory_G2 +  'G'
         return  memory
  
#####[disk message]#####
def get_DiskInfo():
     p = Popen([ 'fdisk' , '-l' ],stdout=PIPE,stderr=PIPE)
     stdout,stderr = p.communicate()
     diskdata = stdout
  
     disk_initial_size = 0
     re_disk_type = re.compile(r 'Disk /dev/[shd]{1}.*:\s+[\d.\s\w]*,\s+([\d]+).*' )
     disk_size_bytes = re_disk_type.findall(diskdata)
     for  size  in  disk_size_bytes:
         disk_initial_size += int(size)
     disk_size_total_bytes =  '%.2f'   % (float(disk_initial_size) /1000/1000/1000 )
     disk_size_total_G = disk_size_total_bytes +  'G'
     disk = disk_size_total_G
     return  disk
  
#####[cpu message]#####
def get_CpuInfo():
     p = Popen([ 'cat' , '/proc/cpuinfo' ],stdout=PIPE,stderr=PIPE)
     stdout, stderr = p.communicate()
     cpudata = stdout.strip()
  
     cpu_dict = {}
     re_cpu_cores = re.compile(r 'processor\s+:\s+([\d])' )
     re_vendor_id = re.compile(r 'vendor_id\s+:\s([\w]+)' )
     re_model_name = re.compile(r 'model name\s+:\s+(.*)' )
  
     res_cpu_cores = re_cpu_cores.findall(cpudata)
     cpu_dict[ 'Cpu_Cores' ] = int(res_cpu_cores[-1]) + 1
     res_vendor_id = re_vendor_id.findall(cpudata)
     cpu_dict[ 'Vendor_Id' ] = res_vendor_id[-1]
     res_model_name = re_model_name.findall(cpudata)
     cpu_dict[ 'Model_Name' ] = res_model_name[-1]
     return  cpu_dict
  
#####[Demi message]#####
def get_dmidecode():
     P = Popen([ 'dmidecode' ],stdout=PIPE)
     data = P.stdout. read ()
     lines = data. split ( '\n\n' )
     dmidecode_line =  lines[2]
     line = [i.strip()  for  in  dmidecode_line. split ( '\n' if  i]
     Manufacturer = line[2]. split ( ': ' )[-1]
     product = line[3]. split ( ': ' )[-1]
     sn = line[5]. split ( ': ' )[-1]
     return  Manufacturer,product,sn
  
if  __name__ ==  '__main__' :
     #####[get data]#####
     hostname  = get_HostnameInfo( '/etc/sysconfig/network' )
     ip = get_Ipaddr()
     osversion = get_OsVerion( '/etc/issue' )
     memory = get_MemoryInfo( '/proc/meminfo' )
     disk = get_DiskInfo()
     Vendor_Id = get_CpuInfo()[ 'Vendor_Id' ]
     Model_Name = get_CpuInfo()[ 'Model_Name' ]
     Cpu_Cores = get_CpuInfo()[ 'Cpu_Cores' ]
     Manufacturer,product,sn = get_dmidecode()
  
     #####[get dict]##### 
     hostinfo = {
         'hostname' : hostname ,
         'ip' :ip,
         'osversion' :osversion,
         'memory' :memory,
         'disk' :disk,
         'vendor_id' :Vendor_Id,
         'model_name' :Model_Name,
         'cpu_core' :Cpu_Cores,
         'product' :product,
         'Manufacturer' :Manufacturer,
         'sn' :sn,
         }
     print hostinfo
     #data = urllib.urlencode(hostinfo)    #注释掉原来
     data = pickle.dumps(hostinfo)     #添加一行
  
     req = urllib2.urlopen( 'http://192.168.1.210:80/hostinfo' ,data)

(3)执行此脚本

1
2
[root@localhost Simplecmdb] # python post_hostinfo.py 
{ 'product' 'VMware Virtual Platform' 'ip' '192.168.1.210' 'vendor_id' 'GenuineIntel' 'cpu_core' : 1,  'disk' '17.18G' 'hostname' 'localhost.localdomain' 'sn' 'VMware-56 4d 41 69 ad a2 e6 3c-84 eb 81 81 e9 b4 4a 54' 'memory' '0.50G' 'osversion' 'CentOS release 6.4 ' 'model_name' 'Intel(R) Xeon(R) CPU E5-2407 0 @ 2.20GHz' 'Manufacturer' 'VMware, Inc.' }

(4)刷新浏览器,会看到新添加了一行

wKioL1T1U-3Cv96tAAkYqbtpQsg850.jpg


2、json方式(和上述方法基本相同)

(1)修改views.py文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[root@localhost Simplecmdb] # cat hostinfo/views.py
from django.shortcuts  import  render
from django.http  import  HttpResponse
from hostinfo.models  import  Host
import  pickle
import  json     #导入模块
 
# Create your views here.
def index(req):
     if  req.method ==  'POST' :
     pick_obj = json.loads(req.body)     #修改此处
         hostname  = pick_obj[ 'hostname' ]
         ip = pick_obj[ 'ip' ]
         osversion = pick_obj[ 'osversion' ]
         memory = pick_obj[ 'memory' ]
         disk = pick_obj[ 'disk' ]
         vendor_id = pick_obj[ 'vendor_id' ]
         model_name = pick_obj[ 'model_name' ]
         cpu_core = pick_obj[ 'cpu_core' ]
         product = pick_obj[ 'product' ]
         Manufacturer = pick_obj[ 'Manufacturer' ]
         sn = pick_obj[ 'sn' ]
 
     try:
         host = Host.objects.get( hostname = hostname )
     except:
             host = Host()
         host. hostname  hostname
         host.ip = ip
         host.osversion = osversion
         host.memory = memory
         host.disk = disk
         host.vendor_id = vendor_id
         host.model_name = model_name
         host.cpu_core = cpu_core
         host.product = product
         host.Manufacturer = Manufacturer
         host.sn = sn    
         host.save()
         return  HttpResponse( 'ok' )
     else :
         return  HttpResponse( 'no data' )

(2)修改搜集主机信息脚本(需要修改一个地方)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
[root@localhost Simplecmdb] # cat post_hostinfo.py 
#!/usr/bin/env python
#coding:utf8
#author:Allentuns
#time:2015-02-14
 
from subprocess  import  Popen,PIPE
import  urllib,urllib2
import  pickle
import  json
import  re
 
###[hostname message]#####
def get_HostnameInfo( file ):
     with  open ( file , 'r' ) as fd:
         data = fd. read (). split ( '\n' )
         for  line  in  data:
             if  line.startswith( 'HOSTNAME' ):
                 hostname  = line. split ( '=' )[1]
                 break
     return  hostname
 
#####[ipaddr message]#####
def get_Ipaddr():
     P = Popen([ 'ifconfig' ],stdout=PIPE)
     data = P.stdout. read ()
     list = []
     str =  ''
     option = False
     lines = data. split ( '\n' )
     for  line  in  lines:
         if  not line.startswith( ' ' ):
             list.append(str)
             str = line
         else :
             str += line
     while  True:
         if  ''  in  list:
             list.remove( '' )
         else :
             break
     r_devname = re.compile( '(eth\d*|lo)'
     r_mac = re.compile( 'HWaddr\s([A-F0-9:]{17})' )
     r_ip = re.compile( 'addr:([\d.]{7,15})' )
     for  line  in  list:
         devname = r_devname.findall(line)
         mac = r_mac.findall(line)
         ip = r_ip.findall(line)
         if  mac:
             return   ip[0]
 
#####[osversion message]#####
def get_OsVerion( file ):
     with  open ( file ) as fd:
     lines = fd.readlines()
     os_version = lines[0][:-8]
     return  os_version
 
#####[memory message]#####
def get_MemoryInfo( file ):
    with  open ( file ) as fd:
         data_list = fd. read (). split ( '\n' )
         MemTotal_line = data_list[0]
         Memory_K = MemTotal_line. split ()[1]
         Memory_G = float(Memory_K) /1000/1000
         Memory_G2 =  '%.2f'  % Memory_G
         memory = Memory_G2 +  'G'
         return  memory
 
#####[disk message]#####
def get_DiskInfo():
     p = Popen([ 'fdisk' , '-l' ],stdout=PIPE,stderr=PIPE)
     stdout,stderr = p.communicate()
     diskdata = stdout
 
     disk_initial_size = 0
     re_disk_type = re.compile(r 'Disk /dev/[shd]{1}.*:\s+[\d.\s\w]*,\s+([\d]+).*' )
     disk_size_bytes = re_disk_type.findall(diskdata)
     for  size  in  disk_size_bytes:
     disk_initial_size += int(size)
     disk_size_total_bytes =  '%.2f'   % (float(disk_initial_size) /1000/1000/1000 )
     disk_size_total_G = disk_size_total_bytes +  'G'
     disk = disk_size_total_G
     return  disk
 
#####[cpu message]#####
def get_CpuInfo():
     p = Popen([ 'cat' , '/proc/cpuinfo' ],stdout=PIPE,stderr=PIPE)
     stdout, stderr = p.communicate()
     cpudata = stdout.strip()
 
     cpu_dict = {}
     re_cpu_cores = re.compile(r 'processor\s+:\s+([\d])' )
     re_vendor_id = re.compile(r 'vendor_id\s+:\s([\w]+)' )
     re_model_name = re.compile(r 'model name\s+:\s+(.*)' )
 
     res_cpu_cores = re_cpu_cores.findall(cpudata)
     cpu_dict[ 'Cpu_Cores' ] = int(res_cpu_cores[-1]) + 1
     res_vendor_id = re_vendor_id.findall(cpudata)
     cpu_dict[ 'Vendor_Id' ] = res_vendor_id[-1]
     res_model_name = re_model_name.findall(cpudata)
     cpu_dict[ 'Model_Name' ] = res_model_name[-1]
     return  cpu_dict
 
#####[Demi message]#####
def get_dmidecode():
     P = Popen([ 'dmidecode' ],stdout=PIPE)
     data = P.stdout. read ()
     lines = data. split ( '\n\n' )
     dmidecode_line =  lines[2]    
     line = [i.strip()  for  in  dmidecode_line. split ( '\n' if  i]
     Manufacturer = line[2]. split ( ': ' )[-1]
     product = line[3]. split ( ': ' )[-1]
     sn = line[5]. split ( ': ' )[-1]
     return  Manufacturer,product,sn
 
if  __name__ ==  '__main__' :
     #####[get data]#####
     hostname  = get_HostnameInfo( '/etc/sysconfig/network' )
     ip = get_Ipaddr()
     osversion = get_OsVerion( '/etc/issue' )
     memory = get_MemoryInfo( '/proc/meminfo' )
     disk = get_DiskInfo()
     Vendor_Id = get_CpuInfo()[ 'Vendor_Id' ]
     Model_Name = get_CpuInfo()[ 'Model_Name' ]
     Cpu_Cores = get_CpuInfo()[ 'Cpu_Cores' ]
     Manufacturer,product,sn = get_dmidecode()
     
     #####[get dict]##### 
     hostinfo = {
     'hostname' : hostname ,
     'ip' :ip,
     'osversion' :osversion,
     'memory' :memory,
     'disk' :disk,
     'vendor_id' :Vendor_Id,
     'model_name' :Model_Name,
     'cpu_core' :Cpu_Cores,
     'product' :product,
     'Manufacturer' :Manufacturer,
     'sn' :sn,
     }
     print hostinfo
     #data = urllib.urlencode(hostinfo)
     #data = pickle.dumps(hostinfo)    #注释掉
     data = json.dumps(hostinfo)        #添加一行
 
     req = urllib2.urlopen( 'http://192.168.1.210:80/hostinfo' ,data)

(3)执行此脚本

1
2
[root@localhost Simplecmdb] # python post_hostinfo.py 
{ 'product' 'VMware Virtual Platform' 'ip' '192.168.1.210' 'vendor_id' 'GenuineIntel' 'cpu_core' : 1,  'disk' '17.18G' 'hostname' 'localhost.localdomain' 'sn' 'VMware-56 4d 41 69 ad a2 e6 3c-84 eb 81 81 e9 b4 4a 54' 'memory' '0.50G' 'osversion' 'CentOS release 6.4 ' 'model_name' 'Intel(R) Xeon(R) CPU E5-2407 0 @ 2.20GHz' 'Manufacturer' 'VMware, Inc.' }

(4)刷新浏览器,会看到再次新添加了一行

wKioL1T1VqXixKeOAAm22zx6Q9w076.jpg










     本文转自zys467754239 51CTO博客,原文链接:http://blog.51cto.com/467754239/1616806,如需转载请自行联系原作者


相关文章
|
1月前
|
存储 Java C语言
【python】——使用嵌套列表实现游戏角色管理
【python】——使用嵌套列表实现游戏角色管理
31 0
|
3月前
|
API 数据库 Python
Python 教程之 Django(8)在 Django 管理界面中渲染模型
Python 教程之 Django(8)在 Django 管理界面中渲染模型
23 0
Python 教程之 Django(8)在 Django 管理界面中渲染模型
|
3月前
|
Java 程序员 C语言
IT圈茶余饭后的“鄙视链” C,C++,Java,Python
IT圈茶余饭后的“鄙视链” C,C++,Java,Python
56 0
|
3月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
97 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
|
1月前
|
SQL 安全 测试技术
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
15 0
|
1月前
|
存储 算法 Java
如何使用 Python 管理内存和避免内存泄漏?
如何使用 Python 管理内存和避免内存泄漏?
100 35
|
1月前
|
Python
如何在Python中创建和管理线程?
如何在Python中创建和管理线程?
21 6
|
2月前
|
监控 安全 网络安全
局域网管理监控的远程访问控制:利用SSH和Python实现安全管理
在当今数字化时代,局域网管理监控对于确保网络安全至关重要。远程访问控制是一项关键任务,通过利用SSH(Secure Shell)和Python编程语言,我们可以实现更加安全的管理方法。本文将介绍如何使用这两者结合,为局域网管理提供可靠的远程访问控制。
188 1
|
3月前
|
人工智能 数据挖掘 Python
Python模块与包的管理与使用
Python作为一种广泛应用的编程语言,模块与包的管理与使用是其核心特性之一。本文将介绍Python中模块与包的概念,以及如何进行有效的管理和利用,帮助读者更好地理解和运用Python编程。
|
3月前
|
运维 Kubernetes 监控
盘点60个Python各行各业管理系统源码Python爱好者不容错过
盘点60个Python各行各业管理系统源码Python爱好者不容错过
37 0

热门文章

最新文章