.awk 文件可以用子进程执行吗?

问题描述 投票:0回答:2

我有 3 个文件都在同一目录中:

  • 例如 awk
  • 数据.csv
  • 文件.py

我想使用子进程执行 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
或其他?

awk subprocess
2个回答
0
投票

显然,Python 找不到您在执行时使用的

awk
(Windows 上为
$PATH
)环境变量中指定的
%path%
:您的 bash 和 Python 似乎看到了不同的目录列表,需要查看以查找可执行文件!

所以,你需要解决这个问题 - 这看起来像 Windows,遗憾的是我无法告诉你如何在这个小众操作系统上调整环境变量。

一般来说:您的

awk
脚本不是很好,您应该小心处理 csv 文件中包含
,
转义或引号中的字符串。并且:Python 确实有一个非常强大的
csv
模块,它可能可以相当轻松地完成您在
awk
中所做的事情。添加
awk
似乎有点额外的复杂性!


0
投票

根据需要调整“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)
© www.soinside.com 2019 - 2024. All rights reserved.