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
相关产品推荐
相关产品推荐

