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

通过Python调用Plink连接串口后无法执行ifconfig命令如何解决?

问题原因
  • 两次os.system()调用对应完全独立的进程,执行上下文无关联:第一次调用启动的是独立的新cmd窗口,plink的串口连接会话仅存在于这个独立窗口的进程中,和Python脚本的当前执行环境完全隔离。
  • 第二次调用os.system("ifconfig")是直接在Python脚本所在的本地Windows系统shell中执行的:一方面Windows原生没有ifconfig命令,另一方面该命令根本没有发送到plink连接的串口远端设备上,自然无法得到预期结果。
解决办法

根据使用场景可以选择两种方案:

  1. 不需要保留独立弹出的cmd窗口,需要在Python中拿到命令返回结果的场景:
    使用subprocess.Popen直接启动plink进程,绑定输入输出流实现交互,示例代码如下:
import subprocess
import time

# 启动plink子进程,绑定标准输入输出流
proc = subprocess.Popen(
    ["plink.exe", "-serial", "COM4", "-sercfg", "115200,8,n,1,N"],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    text=True
)

# 等待远端设备登录完成,时长可根据实际设备启动速度调整
time.sleep(2)

# 写入需要执行的命令,末尾加换行模拟回车确认
proc.stdin.write("ifconfig\n")
proc.stdin.flush()

# 读取命令执行结果,超时时间可根据实际情况调整
try:
    output, error = proc.communicate(timeout=10)
    print("命令执行结果:")
    print(output)
    if error:
        print("错误信息:")
        print(error)
except subprocess.TimeoutExpired:
    proc.kill()
    print("命令执行超时")
  1. 需要保留独立弹出的cmd窗口的场景:
    将需要执行的命令和plink启动逻辑写在同一条启动指令中,通过管道将命令传递给plink,示例代码如下:
import os
os.system('start cmd /k "echo ifconfig | plink.exe -serial COM4 -sercfg 115200,8,n,1,N"')

如果需要执行多条命令,可以用&拼接多条echo指令:

import os
os.system('start cmd /k "(echo ifconfig & echo ls) | plink.exe -serial COM4 -sercfg 115200,8,n,1,N"')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:24:04