【问题标题】:How to fix "awk: Syntax error Context is: >>> ' -'' <<<" error in python subprocess?如何修复python子进程中的“awk:语法错误上下文是:>>>'-''<<<”错误?
【发布时间】:2019-08-29 23:34:59
【问题描述】:

尝试使用 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: 语法错误上下文是:

' -''

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

【问题讨论】:

  • 只需删除打印命令的引号:awk_cmd = ["awk","-F' -'","{print $1}"]

标签: python awk subprocess


【解决方案1】:

坚持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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2019-05-01
    • 2011-03-16
    • 2019-10-16
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多