6

我有一组要处理的数据。我试图运行python代码来在linux中执行“awk”命令。hoverver 无论我如何尝试不同的参数或函数,它都不起作用。

我尝试过两种不同的方式,但都没有奏效。我不知道为什么

1)

#!/usr/bin/env python
import subprocess as sp
cmd = "awk, '{print $2 '\t' $4 '\t' $5 '\t' $6}', B3LYPD.txt"
args = cmd.split(',')
p = sp.Popen(args, stdin = sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE )

2)

#!/usr/bin/env python
import subprocess as sp
cmd = "awk, '{print $2 '\t' $4 '\t' $5 '\t' $6}'"
args = cmd.split(',')
p = sp.Popen(args, stdin = sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE )
c = p.communicate('B3LYPD.txt')
print c
4

2 回答 2

5

虽然我同意这实际上最好在 Python 中完成,而不是调用 awk。如果你真的需要这样做,那么实际的错误在于你的 awk。

#!/usr/bin/env python
import subprocess as sp
args = ["awk", r'{OFS="\t"; print $2,$4,$5,$6}', "B3LYPD.txt"]
p = sp.Popen(args, stdin = sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE )
print(p.stdout.readline()) # will give you the first line of the awk output

编辑:修正了缺少的报价。

于 2013-09-01T13:06:59.093 回答
1

您可以使用三引号来定义命令,然后在子进程中使用shell=True

#!/usr/bin/env python
import subprocess as sp
cmd = """awk '{print $2"\t"$4"\t"$5"\t"$6}' B3LYPD.txt"""
p = sp.Popen(cmd, stdin=sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE,shell=True)
for l in p.stdout:
        print (l.decode())
于 2020-04-02T15:26:49.947 回答