如何解决“ awk:语法错误,上下文是:>>>'-” <<<” python子进程中的错误?

时间:2019-04-08 18:43:14

标签: python awk subprocess

尝试使用subprocess.Popen处理p4文件,然后通过subprocess.Popen将输出再次传递给awk。输入将采用以下形式: //xxx/xx/xx/xx/xx/xx.xx#99-编辑更改xxxxxxx(text + 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:语法错误上下文是:

  
    
      

'-''<<<< / p>     

  

当我在cmd awk -F'-''{print $ 1}'中运行相同命令时,它工作正常。看来awk最​​后得到一个额外的单引号。理想情况下,它应该是'-'而不是'-'。

1 个答案:

答案 0 :(得分:0)

坚持使用awk和子流程解决方案,只需使用双引号并将单引号除去,这仅对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])