通过Python调用Plink连接串口后无法执行ifconfig命令如何解决?
问题原因
- 两次
os.system()调用对应完全独立的进程,执行上下文无关联:第一次调用启动的是独立的新cmd窗口,plink的串口连接会话仅存在于这个独立窗口的进程中,和Python脚本的当前执行环境完全隔离。 - 第二次调用
os.system("ifconfig")是直接在Python脚本所在的本地Windows系统shell中执行的:一方面Windows原生没有ifconfig命令,另一方面该命令根本没有发送到plink连接的串口远端设备上,自然无法得到预期结果。
解决办法
根据使用场景可以选择两种方案:
- 不需要保留独立弹出的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("命令执行超时")
- 需要保留独立弹出的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
相关产品推荐
相关产品推荐

