如何修复“awk:语法错误上下文是:>>>' - '<<

问题描述 投票:-1回答:1

尝试使用subprocess.Popen执行p4文件,然后通过subprocess.Popen再次将该输出传递给awk。输入格式为://xxx/xx/xx/xx/xx/xx.xx#99 - 编辑更改xxxxxxx(文本+ k)

在这里用'x'替换了原始名称,因为它是所有专有信息。想根据“ - ”(空格连字符)拆分并获取带有修订号的文件名。

awk_cmd = ["awk","-F\' -\'","\'{print $1}\'"]
awk_cmd_output = subprocess.Popen(awk_cmd, stdout=subprocess.PIPE, stdin = p4_files_output.stdout)

看到来自awk的这个错误:awk:语法错误上下文是:

' -'' <<<

当我在cmd中运行相同的awk -F' - ''{print $ 1}'时,它运行正常。似乎awk最终获得了额外的单引号。理想情况下应该是' - '而不是' - ''。

python awk subprocess
1个回答
0
投票

坚持使用awk和subprocess解决方案,只需使用双引号并删除单引号,这些只对shell有用,但在使用subprocess时会直接传递给进程,这会使命令失败:

awk_cmd = ["awk","-F -","{print $1}"]

subprocess添加适当的引用。它不会根据空格分割参数。

但最好的方法是放弃awk,并使用str.split,如:

output = []
for line in p4_files_output.stdout:
    output.append(line.decode().split(" -")[0])
output_text = "\n".join(output)

或使用理解的单行:

output_text = "\n".join([line.decode().split(" -")[0] line in p4_files_output.stdout])
© www.soinside.com 2019 - 2024. All rights reserved.