尝试使用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最终获得了额外的单引号。理想情况下应该是' - '而不是' - ''。
坚持使用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])