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

Python使用subprocess执行iw管道命令报FileNotFoundError是什么原因?

问题原因

报错的核心原因是subprocess模块默认不通过Shell解析命令,直接传入包含管道符|的完整命令字符串时,Python会将整段字符串视为一个单独的可执行文件名去系统路径查找,自然找不到对应文件,触发FileNotFoundError。

解决方案

方案1:启用Shell解析(适合固定命令场景)

直接给check_output方法增加shell=True参数,让Python调用系统Shell来解析带管道的命令即可。注意如果命令包含不可信的用户输入时,不要使用该方案,存在Shell注入风险。

修正后的代码:

import subprocess
output_bytes = subprocess.check_output("iw dev wlan0 link | grep signal | awk '{print $2}'", shell=True)
# 加strip()去除末尾的换行符
output = output_bytes.decode("utf-8").strip()
print(f'Signal: {output}')

方案2:拆分命令逻辑(更安全更稳定,推荐)

不需要依赖Shell、grep和awk,直接在Python侧完成输出过滤,兼容性和安全性更好:

import subprocess
# 仅执行iw命令,参数拆分为列表传入
iw_output = subprocess.check_output(["iw", "dev", "wlan0", "link"], text=True)
# 过滤取信号值
signal = ""
for line in iw_output.splitlines():
    if "signal" in line:
        signal = line.split()[1]
        break
print(f'Signal: {signal}')

内容的提问来源于stack exchange,提问作者Don T Spamme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:57:04