python 脚本windows 能在linux用吗_利用Python脚本获取Windows和Linux的系统版本信息

查看系统版本信息是一件家常便饭的事情,有时候需要将版本信息录入到资产管理系统中,如果每次手动的去查询这些信息再录入系统那么是一件令人呢头疼的事情,如果采用脚本去完成这件事情,那么情况就有所不同了。

在Python的世界里,获取Windows版本信息和Linux的版本信息都可以采用platform模块,但platform模块也不是万能的,有些特殊的信息(比如Windows的内部版本号)这个模块拿不到,那么只能另辟蹊径了。

在Linux系统中,可以简单的认为一切都是文件,那么就算没有现成的命令可用时,可以用open()文件的方法通过对文件的读写控制它。而在Windows的大部分信息在注册表中都能查到,因此可以从注册表上下手。Windows注册表是一个好东西,拿数据就像在Linux下一切都是文件一样方便,如果想用Python访问注册表,除了权限外就是需要模块了,在Python中_winreg是一个内置模块,通过这一模块可以对注册表进行读写。

本脚本收集了一些获取版本信息的常见方法,除了platform模块外,还有其他的模块可供使用,因为platform模块不是内置模块,因此需要额外安装。Windows下运行脚本需要考虑权限问题和中文字符的问题,解决Python打印中文字符的问题是通过脚本中的get_system_encoding()函数实现的,这个函数取自Django,经过测试这个函数还是非常好用的。

注:在PyCharm中,经常遇到Run窗口打印出的中文显示乱码,代码中没有经过正确转码是一方面,而IDE的编码设置也是一方面。如果是在Windows下开发,那么建议代码用UTF-8编写,IDE的编码则设置为“GBK”,设置方法“File”-->"Settings"-->"Editor"-->"File Encoding"-->"IDE Encoding"选择“”, "Project Encoding"选择UTF-8保证代码的编码一致性。

wKiom1hTq8qj_iAsAANfbzAONsk729.png

脚本如下:#!/usr/bin/python

# encoding: utf-8

# -*- coding: utf8 -*-

"""

Created by PyCharm.

File: LinuxBashShellScriptForOps:getSystemVersion.py

User: Guodong

Create Date: 2016/12/16

Create Time: 14:51

"""

import sys

import os

import platform

import subprocess

import codecs

import locale

def get_system_encoding():

"""

The encoding of the default system locale but falls back to the given

fallback encoding if the encoding is unsupported by python or could

not be determined. See tickets #10335 and #5846

"""

try:

encoding = locale.getdefaultlocale()[1] or 'ascii'

codecs.lookup(encoding)

except Exception:

encoding = 'ascii'

return encoding

DEFAULT_LOCALE_ENCODING = get_system_encoding()

mswindows = (sys.platform == "win32") # learning from 'subprocess' module

linux = (sys.platform == "linux2")

hidden_hostname = True

if mswindows:

uname = list(platform.uname())

if hidden_hostname:

uname[1] = "hidden_hostname"

print uname

import _winreg

try:

reg_key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion")

if reg_key:

ProductName = _winreg.QueryValueEx(reg_key, "ProductName")[0] or None

EditionId = _winreg.QueryValueEx(reg_key, "EditionId")[0] or None

ReleaseId = _winreg.QueryValueEx(reg_key, "ReleaseId")[0] or None

CurrentBuild = _winreg.QueryValueEx(reg_key, "CurrentBuild")[0] or None

BuildLabEx = _winreg.QueryValueEx(reg_key, "BuildLabEx")[0][:9] or None

print (ProductName, EditionId, ReleaseId, CurrentBuild, BuildLabEx)

except Exception as e:

print e.message.decode(DEFAULT_LOCALE_ENCODING)

if linux:

uname = list(platform.uname())

if hidden_hostname:

uname[1] = "hidden_hostname"

print uname

proc_obj = subprocess.Popen(r'uname -a', shell=True, stdout=subprocess.PIPE,

stderr=subprocess.STDOUT)

result = proc_obj.stdout.read().strip().decode(DEFAULT_LOCALE_ENCODING)

if result:

print result

if os.path.isfile("/proc/version"):

with open("/proc/version", 'r') as f:

content = f.read().strip()

if content != "":

print content

if os.path.isfile("/etc/issue"):

with open("/etc/issue", 'r') as f:

content = f.read().strip()

if content != "":

print content

截图如下:

(1)注册表信息获取位置:

wKiom1hTq8zBxU_qAAOKQjWLr1o654.png

(2)Windows环境下的输出:

wKioL1hTq82h7zDzAABR_tXHjF8283.png

(3)Linux环境下的输出:

wKiom1hTq82hj5qjAABURhBNFbA898.png

tag:Python 系统版本,Windows 内部版本,Python操作注册表

--end--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python的paramiko库实现在Windows上与Linux机器之间的文件传输。具体步骤如下: 1. 安装paramiko库 可以使用pip命令安装paramiko库,命令为: ``` pip install paramiko ``` 2. 编写脚本Windows上编写一个Python脚本使用paramiko库连接到Linux机器,然后执行文件同步命令。 以下是示例代码: ```python import os import paramiko import time # 定义本地和远程目录 local_path = '/path/to/local/dir' remote_path = '/path/to/remote/dir' # 定义Linux机器的IP地址和登录信息 ip_list = ['192.168.1.100', '192.168.1.101'] username = 'username' password = 'password' # 创建SSH客户端 client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 定义同步函数 def sync_files(): # 遍历Linux机器列表 for ip in ip_list: client.connect(ip, username=username, password=password) # 获取本地目录下的文件列表 files = os.listdir(local_path) # 遍历本地文件列表,将文件同步到远程目录 for file in files: local_file_path = os.path.join(local_path, file) remote_file_path = os.path.join(remote_path, file) # 判断是否为目录,如果是则递归同步 if os.path.isdir(local_file_path): # 创建远程目录 stdin, stdout, stderr = client.exec_command('mkdir -p ' + remote_file_path) stderr_lines = stderr.readlines() if len(stderr_lines) > 0: print(stderr_lines) # 递归同步子目录 sync_files(local_file_path, remote_file_path) else: # 同步文件 sftp = client.open_sftp() sftp.put(local_file_path, remote_file_path) sftp.close() # 同步文件,每隔5分钟同步一次 while True: sync_files() time.sleep(300) ``` 上述代码中,定义了本地目录和远程目录的路径,以及Linux机器的IP地址列表和登录信息。然后通过paramiko库创建SSH客户端,遍历Linux机器列表,连接到每台Linux机器。接着定义了一个同步函数,用于将本地目录下的文件同步到远程目录。在while循环中调用同步函数,每隔5分钟同步一次。 3. 运行脚本Windows上运行脚本即可实现定时同步文件和文件夹至多台Linux机器。可以使用Windows的计划任务功能,或者使用第三方定时任务软件,如cron等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值