1

我一直在互联网上寻找一种方法来获取计算机的 UUID 并将其设置为 python 中的变量。

我尝试做的一些方法没有奏效。

创见:

import os
x = os.system("wmic diskdrive get serialnumber")
print(x)

但是这不起作用,并且只返回 0。

我想知道他们是否是我可以在 python 中找到唯一硬盘 ID 或任何其他类型标识符的一种方式。

4

4 回答 4

6

os.system 函数返回执行命令的退出代码,而不是它的标准输出。

根据Python 官方文档

在 Unix 上,返回值是以 wait() 指定的格式编码的进程的退出状态。

在 Windows 上,返回值是系统 shell 运行命令后返回的值。

要获得所需的输出,推荐的方法是使用 subprocess 模块中定义的一些函数。您的场景非常简单,因此 subprocess.check_output 可以正常工作。

你只需要用这个替换你发布的代码:

import subprocess
x = subprocess.check_output('wmic csproduct get UUID')
print(x)
于 2016-09-11T03:38:46.610 回答
6

如果目的是获取硬盘的序列号,那么可以这样做:

在 Linux 中(将 /dev/sda 替换为您想要其信息的块磁盘标识符):

>>> import os
>>> os.popen("hdparm -I /dev/sda | grep 'Serial Number'").read().split()[-1]

在 Windows 中:

>>> import os
>>> os.popen("wmic diskdrive get serialnumber").read().split()[-1]
于 2016-09-11T03:41:29.193 回答
1

对于窗户:

import wmi
import os

def get_serial_number_of_system_physical_disk():
    c = wmi.WMI()
    logical_disk = c.Win32_LogicalDisk(Caption=os.getenv("SystemDrive"))[0]
    partition = logical_disk.associators()[1]
    physical_disc = partition.associators()[0]
    return physical_disc.SerialNumber
于 2020-12-16T12:21:00.810 回答
0

对于 Linux 试试这个:

def get_uuid():
    dmidecode = subprocess.Popen(['dmidecode'],
                                      stdout=subprocess.PIPE,
                                      bufsize=1,
                                      universal_newlines=True
                                      )

    while True:
        line = dmidecode.stdout.readline()
        if "UUID:" in str(line):
            uuid = str(line).split("UUID:", 1)[1].split()[0]
            return uuid
        if not line:
            break

my_uuid = get_uuid()
    print("My ID:", my_uuid)
于 2019-12-12T09:01:24.687 回答