簡體   English   中英

如何在 Python 中運行 PowerShell cmdlet 以獲取已連接 USB 設備的列表?

[英]How to run a PowerShell cmdlet in Python to get a list of connected USB devices?

我嘗試在我的 Python 項目中列出連接的 USB 設備。

我嘗試將os.system()與命令提示符一起使用,但我找不到命令提示符列出連接的 USB 設備(名稱)的命令。

我找到了一個 PowerShell 命令

Get-PnpDevice -PresentOnly | Where-Object { $_. InstanceId -match '^USB' }

這很好用。

我想知道是否有使用os.system()列出 USB 連接設備的命令提示符,或者如何使用os.system()或任何其他命令在 Python 中運行 PowerShell cmdlet。

有一個名為pyUSB的模塊運行良好。
或者,要運行 Powershell 命令,您可以使用subprocess包。

import subprocess
result = subprocess.run(["powershell", "-Command", MyCommand], capture_output=True)

我對 Python 的看法很差,我想如果你想使用 PowerShell 生成的輸出,你可能想在 Python 中序列化對象並反序列化它們,因此使用ConvertTo-Json

import subprocess
import json

cmd = '''
    Get-PnpDevice -PresentOnly |
        Where-Object { $_.InstanceId -match '^USB' } |
            ConvertTo-Json
'''

result = json.loads(
    subprocess.run(["powershell", "-Command", cmd], capture_output=True).stdout
)

padding = 0
properties = []

for i in result[0].keys():
    if i in ['CimClass', 'CimInstanceProperties', 'CimSystemProperties']:
        continue
    properties.append(i)
    if len(i) > padding:
        padding = len(i)

for i in result:
    for property in properties:
        print(property.ljust(padding), ':', i[property])
    print('\n')

使用subprocess模塊。 在你的情況下,它看起來像:

import subprocess

devices_raw: str = subprocess.run(
    ["Get-PnpDevice -PresentOnly | Where-Object { $_. InstanceId -match '^USB' }"],
    capture_output=True
).stdout

# ... working with devices_raw as a string, probably you'll need to split it or smth.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM