Как исправить ошибку «awk: Синтаксис» Контекст: >>> '-' '<<< "ошибка в подпроцессе python? - PullRequest
0 голосов
/ 08 апреля 2019

Попытка сделать p4-файлы с subprocess.Popen, а затем снова передать этот вывод в awk через subprocess.Popen.Входные данные будут иметь вид: //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: Синтаксическая ошибка Контекст:

'-' '<<< </p>

Когда я запускаю то же самое в cmd awk -F' - '' {print $ 1} ', все работает отлично.Похоже, в конце концов awk получит дополнительную одинарную кавычку.В идеале это должно быть '-', а не '-' '.

1 Ответ

0 голосов
/ 08 апреля 2019

придерживаясь awk и решения подпроцесса, просто используйте двойные кавычки и отбрасывайте одинарные кавычки, которые полезны только для оболочки, но передаются буквально процессу при использовании 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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...