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

如何用subprocess执行awk脚本?Windows下遇文件找不到错误

问题描述

我在同一目录下有三个文件:ex.awk、data.csv、file.py。希望通过subprocess执行awk脚本,用于后续PyTest测试用例调用。

示例文件

ex.awk

#!/usr/bin/awk -f

BEGIN {
    FS = ",";
}
{
    print NF;
}
END {print "DONE"}

data.csv

10,34,32
4,76,8304
4759,5869,2940

file.py

import subprocess
cmd = ['awk', '-f', 'ex.awk', 'data.csv']
subprocess.run(cmd)

在bash中执行命令awk -f ex.awk data.csv可得到正确结果:

3
3
3
DONE

但运行file.py时出现错误:FileNotFoundError: [WinError 2] The system cannot find the file specified。请问参数数组是否缺失内容?是否需要使用shell等其他subprocess参数?

解决方案

这个错误的核心原因是Windows系统默认不自带awk命令——除非你预先安装了Git Bash、Cygwin、GNU Awk等工具,并将其可执行文件路径添加到系统环境变量PATH中。针对这个问题,有几种可行的解决方式:

方式1:指定awk可执行文件的完整路径

如果你已经安装了awk工具(比如GNU Awk),找到它的.exe文件路径,直接替换命令数组中的awk为完整路径。例如:

import subprocess
cmd = ['C:/Program Files/GnuWin32/bin/gawk.exe', '-f', 'ex.awk', 'data.csv']
subprocess.run(cmd)

方式2:启用shell参数

设置shell=True让subprocess调用系统shell来解析执行命令,这样shell会自动从环境变量PATH中查找awk的位置(前提是awk路径已加入PATH,或者你使用的是自带awk的终端环境如Git Bash)。可以用字符串形式的命令:

import subprocess
cmd = 'awk -f ex.awk data.csv'
subprocess.run(cmd, shell=True)

也可以保留数组形式的命令,配合shell=True使用:

import subprocess
cmd = ['awk', '-f', 'ex.awk', 'data.csv']
subprocess.run(cmd, shell=True)

方式3:指定bash作为执行环境(针对Git Bash用户)

如果你用Git Bash作为开发环境,可以直接指定subprocess使用bash.exe来执行命令,确保在bash环境下运行awk:

import subprocess
cmd = ['awk', '-f', 'ex.awk', 'data.csv']
subprocess.run(cmd, executable='C:/Program Files/Git/bin/bash.exe')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:54:59