Python Awk 的子进程
Python SubProcess For Awk
我正在尝试在 Python 中将此 awk 命令与子进程一起使用,但我不确定如何使用双管道。我宁愿不使用 shell=True
因为这是不好的做法。我已经能够合并其他 awk 命令,但其中 none 需要双管道。
awk 'FNR==NR{if([=15=]~/name: /){line=FNR};next} FNR<=line || FNR>(line+4)' file.txt file.txt
这将删除最后一次出现的 "name" 之后的 4 行。这是我的文件的原始内容:
name: file1
name: file2
name: file3
file4
file5
file6
运行 终端中的此命令将 return:
name: file1
name: file2
name: file3
file4
file5
file6
我正在尝试使用 python 子进程从 python 文件中执行此操作,但我不确定如何使用。
这是我最初的方法:
import os
import sys
import subprocess as sb
sb.Popen('awk','FNR==NR{if([=13=]~/name: /){line=FNR};next} FNR<=line || FNR>(line+4)','file.txt','file.txt')
这是我得到的错误:
TypeError: bufsize must be an integer
关于如何在没有 shell=True
的情况下执行此操作的任何帮助?
您需要将命令的参数放在列表中 ([]
),否则它们最终将被分配给 bufsize
、executable
等,而不是你想让他们去哪里:
sb.Popen(['awk','FNR==NR{if([=10=]~/name: /){line=FNR};next} FNR<=line || FNR>(line+4)','file.txt','file.txt'])
与||
无关。
我正在尝试在 Python 中将此 awk 命令与子进程一起使用,但我不确定如何使用双管道。我宁愿不使用 shell=True
因为这是不好的做法。我已经能够合并其他 awk 命令,但其中 none 需要双管道。
awk 'FNR==NR{if([=15=]~/name: /){line=FNR};next} FNR<=line || FNR>(line+4)' file.txt file.txt
这将删除最后一次出现的 "name" 之后的 4 行。这是我的文件的原始内容:
name: file1
name: file2
name: file3
file4
file5
file6
运行 终端中的此命令将 return:
name: file1
name: file2
name: file3
file4
file5
file6
我正在尝试使用 python 子进程从 python 文件中执行此操作,但我不确定如何使用。
这是我最初的方法:
import os
import sys
import subprocess as sb
sb.Popen('awk','FNR==NR{if([=13=]~/name: /){line=FNR};next} FNR<=line || FNR>(line+4)','file.txt','file.txt')
这是我得到的错误:
TypeError: bufsize must be an integer
关于如何在没有 shell=True
的情况下执行此操作的任何帮助?
您需要将命令的参数放在列表中 ([]
),否则它们最终将被分配给 bufsize
、executable
等,而不是你想让他们去哪里:
sb.Popen(['awk','FNR==NR{if([=10=]~/name: /){line=FNR};next} FNR<=line || FNR>(line+4)','file.txt','file.txt'])
与||
无关。