python获取当前系统类型:os.name, sys.platform, platform.system对比

在很多情况下,需要在python中获取当前系统的类型,用于判断是unix/windows/mac或者java虚拟机等,python中提供了os.name, sys.platform, platform.system等方式,但是起初并不知道各个函数之间的区别以及在什么情况下用那种。

函数简介

首先,分别对每个函数进行说明,明确其提供的能力,以及如何使用。

os.name

官方文档(v3.6.6)解释如下:

os.name

The name of the operating system dependent module imported. The following names have currently been registered: 'posix', 'nt', 'java'

该变量返回当前操作系统的类型,当前只注册了3个值:分别是posix , nt , java

使用方法:

import os
print(os.name)

sys.platform

sys.platform

This string contains a platform identifier that can be used to append platform-specific components to sys.path, for instance.

该变量返回当前系统的平台标识。

对除了linux的Unix系统, 是uname -s 的返回值和uname -r 版本合并的小写形式,例如linux2指的是使用2.x.x版本的linux系统。由于包含了系统版本,故推荐的使用方法是借助startwith 函数。

import sys
if sys.platform.startwith('linux')
    # linux 代码
    pass
 elif sys.platform.startwith('freebsd')
    # freebsd 代码
    pass

对windows系统, 返回值参考下表:

系统返回值
window’win32‘
linux’linux‘
Windows/Cygwin‘cygwin’
Mac OS X‘darwin’

这些值在编译时已经确定了。

platform.system()

platform.system()

Returns the system/OS name, e.g. 'Linux', 'Windows', or 'Java'. An empty string is returned if the value cannot be determined.

返回当前操作系统的名字,例如Linux , Windows , Java , …如果不能确定会返回空字符串

这是在上层的脚本实现,需要在运行时执行。

主要区别

  • sys.platform 在构建配置时指定的编译器定义
  • os.name 用于检查特定的某些模块是否可用(例如:POSIX,nt, …)
  • platform.system() 实际上运行uname和潜在的几个其他函数来确定运行时的系统类型

    更多更及时的博客更新请戳—> KingRumn

### 回答1: 可以使用subprocess模块来获取os.system的输出。具体操作如下: 1. 导入subprocess模块 ```python import subprocess ``` 2. 使用subprocess模块的check_output函数来获取os.system的输出 ```python output = subprocess.check_output("command", shell=True) ``` 其中,"command"是要执行的命令,shell=True表示使用shell来执行命令。 3. 将输出转换为字符串类型 ```python output_str = output.decode("utf-8") ``` 其中,"utf-8"是输出的编码方式,可以根据实际情况进行修改。 4. 打印输出 ```python print(output_str) ``` 以上就是使用subprocess模块获取os.system的输出的方法。 ### 回答2: 在Python获取`os.system`的输出可以使用`subprocess`模块代替`os`模块。 `subprocess`提供了更多的控制选项,并且可以获取`stdout`和`stderr`的输出,可以更好地进行进一步的操作。 下面是如何使用`subprocess`模块获取命令行程序的输出: ```python import subprocess # 要运行的命令 command = "dir" # 执行命令并获取输出结果 output = subprocess.check_output(command, shell=True) # 打印输出结果 print(output) ``` 在这个例子中,使用`subprocess.check_output()`函数代替`os.system()`函数来运行`dir`命令,并将`shell`参数设置为`True`表示在系统的shell中执行命令。 使用`check_output()`函数可以捕获命令的输出,并将其作为字节字符串返回。我们可以使用`decode()`函数将其转换为字符串,也可以直接使用字节字符串。 在实际使用时,可能需要对命令的输出进行处理,例如将其分离为行、将其保存到文件中或将其作为其他程序的输入。`subprocess`模块提供了更多的选项和函数来实现这些操作。 ### 回答3: 在使用Python调用操作系统命令时,可以使用os.system函数来执行命令。但是,os.system函数并不会返回命令的输出结果,该函数只是返回命令的执行状态码。 如果需要获取命令的输出结果,可以使用Python的subprocess模块。subprocess模块提供了Popen函数来执行命令,并且可以获取命令的输出结果。 以下是使用subprocess模块获取os.system函数的输出的步骤: 1. 导入subprocess模块:使用import subprocess语句来导入subprocess模块。 2. 执行命令:使用subprocess.Popen函数来执行命令,并将结果赋值给变量p,例如:p = subprocess.Popen('command', stdout=subprocess.PIPE, shell=True) 其中,'command'是要执行的命令,stdout=subprocess.PIPE表示将命令的输出结果输出到一个管道中,以便后续处理;shell=True表示在shell中执行命令,可以使用shell语法。 3. 获取输出结果:使用p.communicate()函数来获取命令的输出结果,例如:output, err = p.communicate() 其中,output是命令的输出结果,err是错误信息。 4. 处理输出结果:对获取的命令输出结果进行处理,例如,将输出结果转换为字符串类型。 完整代码示例: ``` import subprocess # 执行命令 p = subprocess.Popen('ls -l', stdout=subprocess.PIPE, shell=True) # 获取输出结果 output, err = p.communicate() # 处理输出结果 output_str = output.decode('utf-8') # 输出结果 print(output_str) ``` 上述代码示例中,执行了ls -l命令,并将输出结果打印出来。在实际使用中,可以根据需求对输出结果进行进一步处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值