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

  • Ex.awk
  • Data.csv
  • File.py

我想使用子进程来执行我的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

I'm trying to get the same result when running File.py, but I get the following

FileNotFoundError: [WinError 2] The system cannot find the file specified

我的数组中是否缺少一些参数?我是否需要使用其他一些子进程参数,如shell或其他?

推荐答案

要在Windows上从Python执行awk脚本,您遇到了FileNotFoundError,这通常是由于Windows处理文件路径的方式或执行Unix/Linux特定的实用程序,而这些实用程序可能无法在Windows命令提示符环境中直接使用.因此,您需要提供绝对路径或更新环境变量路径以使其可用.

如有必要,请在调整‘C:/Program Files/Git/usr/bin/BUCK.EXE’路径后try 这些方法;

import subprocess

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

或者,要在Git Bash或WSL提供的类似Unix的shell 中执行它:

import subprocess

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

Python相关问答推荐

如何使用Google Gemini API为单个提示生成多个响应?

acme错误-Veritas错误:模块收件箱没有属性linear_util'

如何将ctyles.POINTER(ctyles.c_float)转换为int?

类型错误:输入类型不支持ufuncisnan-在执行Mann-Whitney U测试时[SOLVED]

将输入管道传输到正在运行的Python脚本中

无法通过python-jira访问jira工作日志(log)中的 comments

什么相当于pytorch中的numpy累积ufunc

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

当递归函数的返回值未绑定到变量时,非局部变量不更新:

索引到 torch 张量,沿轴具有可变长度索引

python panda ExcelWriter切换动态公式到数组公式

重置PD帧中的值

基于多个数组的多个条件将值添加到numpy数组

使用__json__的 pyramid 在客户端返回意外格式

Python pint将1/华氏度转换为1/摄氏度°°

将链中的矩阵乘法应用于多组值

删除Dataframe中的第一个空白行并重新索引列

将像素信息写入文件并读取该文件

我如何为测试函数的参数化提供fixture 生成的数据?如果我可以的话,还有其他 Select 吗?

删除另一个div中的特定div容器