You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python通过USB向电脑发送PowerShell命令(树莓派终端开发)

实现树莓派通过USB向电脑发送PowerShell命令的方案

核心思路

树莓派与电脑通过USB连接时,可通过两种主流方式实现命令发送:USB串口通信(稳定可控,支持双向交互)或模拟USB HID键盘(无需电脑端额外脚本,直接模拟输入),以下是具体实现步骤:


方案一:USB串口通信

树莓派端配置与代码

  1. 启用USB串口功能:
    修改/boot/config.txt,添加或确保存在:

    dtoverlay=dwc2
    

    修改/boot/cmdline.txt,在console=serial0,115200后追加:

    modules-load=dwc2,g_serial
    

    完成后重启树莓派。

  2. 编写Python发送脚本:

    import serial
    import time
    
    # 初始化USB串口设备,波特率需与电脑端一致
    ser = serial.Serial('/dev/ttyGS0', 9600, timeout=1)
    time.sleep(2)  # 等待串口初始化完成
    
    # 定义要发送的PowerShell命令
    ps_command = 'Get-ChildItem C:\\'
    ser.write((ps_command + '\n').encode('utf-8'))
    print(f"已发送命令: {ps_command}")
    
    ser.close()
    

电脑端处理脚本

  1. 打开设备管理器,找到树莓派对应的COM端口(如COM3)。
  2. 用Python编写监听执行脚本:
    import serial
    import subprocess
    
    ser = serial.Serial('COM3', 9600, timeout=1)
    while True:
        command = ser.readline().decode('utf-8').strip()
        if command:
            print(f"收到命令: {command}")
            # 执行PowerShell命令并捕获输出
            result = subprocess.run(
                ['powershell', '-Command', command],
                capture_output=True,
                text=True
            )
            print(f"执行结果:\n{result.stdout}")
            # 可选:将结果回传给树莓派
            ser.write(result.stdout.encode('utf-8'))
    
    或直接用PowerShell监听:
    $port = New-Object System.IO.Ports.SerialPort COM3,9600,None,8,one
    $port.Open()
    while($true) {
        if ($port.BytesToRead -gt 0) {
            $command = $port.ReadLine().Trim()
            Write-Host "收到命令: $command"
            $output = Invoke-Expression $command
            $port.WriteLine($output)
        }
        Start-Sleep -Milliseconds 100
    }
    

方案二:模拟USB HID键盘

树莓派端配置与代码

  1. 启用USB HID功能:
    修改/boot/config.txt添加:

    dtoverlay=dwc2
    

    修改/boot/cmdline.txt添加:

    modules-load=dwc2,g_hid
    

    重启树莓派。

  2. 安装依赖并编写模拟脚本:

    sudo apt-get install python3-evdev
    
    from evdev import UInput, ecodes as e
    import time
    
    # 初始化HID键盘设备
    ui = UInput()
    
    # 模拟打开PowerShell:Win+R 输入powershell 回车
    ui.write(e.EV_KEY, e.KEY_LEFTMETA, 1)
    ui.write(e.EV_KEY, e.KEY_R, 1)
    ui.syn()
    time.sleep(0.1)
    ui.write(e.EV_KEY, e.KEY_LEFTMETA, 0)
    ui.write(e.EV_KEY, e.KEY_R, 0)
    ui.syn()
    time.sleep(0.5)
    
    # 输入目标PowerShell命令
    command = 'Get-ChildItem C:\\\n'
    for char in command:
        # 处理普通字符
        key_code = getattr(e, f'KEY_{char.upper()}', None)
        if key_code:
            ui.write(e.EV_KEY, key_code, 1)
            ui.syn()
            time.sleep(0.05)
            ui.write(e.EV_KEY, key_code, 0)
            ui.syn()
        # 处理特殊字符(示例:反斜杠)
        elif char == '\\':
            ui.write(e.EV_KEY, e.KEY_LEFTALT, 1)
            ui.write(e.EV_KEY, e.KEY_RBRACE, 1)
            ui.syn()
            time.sleep(0.05)
            ui.write(e.EV_KEY, e.KEY_LEFTALT, 0)
            ui.write(e.EV_KEY, e.KEY_RBRACE, 0)
            ui.syn()
    
    ui.close()
    

注意事项

  • 串口方案适合复杂命令与双向数据交互,但需电脑端保持监听脚本运行;HID方案无需电脑端额外程序,但仅适用于简单命令输入。
  • 树莓派修改系统配置后必须重启才能生效。
  • HID模拟时需注意特殊字符的按键映射,可参考evdev库的ecodes模块补充更多字符处理逻辑。

内容的提问来源于stack exchange,提问作者k k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:45:37