我有 3 个文件都在同一目录中:
我想使用子进程执行 awk 文件,以便将来可以在 PyTest 测试用例中调用它。这些是我的示例文件:
例如 awk
#!/usr/bin/awk -f
BEGIN {
FS = ",";
}
{
print NF;
}
END {print "DONE"}
数据.csv
10,34,32
4,76,8304
4759,5869,2940
文件.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
或其他?
显然,Python 找不到您在执行时使用的
awk
(Windows 上为 $PATH
)环境变量中指定的 %path%
:您的 bash 和 Python 似乎看到了不同的目录列表,需要查看以查找可执行文件!
所以,你需要解决这个问题 - 这看起来像 Windows,遗憾的是我无法告诉你如何在这个小众操作系统上调整环境变量。
一般来说:您的
awk
脚本不是很好,您应该小心处理 csv 文件中包含 ,
转义或引号中的字符串。并且:Python 确实有一个非常强大的 csv
模块,它可能可以相当轻松地完成您在 awk
中所做的事情。添加 awk
似乎有点额外的复杂性!
根据需要调整“C:/Program Files/Git/usr/bin/awk.exe”路径后尝试此操作;
import subprocess
cmd = ['C:/Program Files/Git/usr/bin/awk.exe', '-f', 'ex.awk', 'data.csv']
subprocess.run(cmd, shell=True)