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

Python 3调用subprocess系列接口等待子进程时触发崩溃问题求助

问题原因和修复方案
  • 手动拼接命令字符串的写法存在隐患:Windows 下命令行参数转义规则复杂,手动拼接很容易触发解析错误,subprocess 原生支持列表形式传参,会自动处理所有转义逻辑,不需要手动加空格、引号处理特殊路径。
  • 等待时崩溃的核心原因是子进程运行过程中会向标准输出/标准错误流写入数据,你的代码没有消费这些输出,流缓冲区被占满后子进程阻塞,进而导致父进程在 sleep/wait 时触发异常崩溃。
修复后的代码示例
import subprocess
import time

cmd = "C:/Program Files (x86)/Phoenix Contact Software/TPS Configurator/FS_PROG/FS_PROG.exe"
# 所有参数按顺序放在列表中,不需要手动处理引号和空格
args = [
    cmd,
    "tps_configurator.xml",
    "192.168.16.227",
    "192.168.16.29",
    f"{intmac:012X}",
    f"{intmac + 1:012X}",
    f"{intmac + 2:012X}",
    "0"
]

# 显式将子进程的输入、输出、错误流重定向到空,避免缓冲区占满导致阻塞
p = subprocess.Popen(args, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
time.sleep(5)
input("\npress enter to quit")

如果你需要使用 subprocess.run、subprocess.call,也可以传入相同的流重定向参数即可解决崩溃问题。如果需要获取子进程的输出,可以将 stdout、stderr 设为 subprocess.PIPE,之后调用 p.communicate() 读取输出,不要直接调用 p.wait(),避免缓冲区满阻塞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:18:03