
В настоящее время я пишу скрипт python на Centos 7 VM, который должен выполнить несколько команд оболочки по пути. Я нашел библиотеку, которая делает эту работу, но я получаю ошибку на одной из них. Мне дали эти команды из текстового файла, поэтому я на самом деле не знаю, что они делают. Я понимаю простые, но эти выше моего уровня. Поскольку только 2 строки вызывают ошибку, я знаю, что это не сам скрипт, а скорее то, как я его использую ./linkerd
.linkerd'sдвоичный файл, а linkerd_images.txt содержит список изображений:
./linkerd install --ha --ignore-cluster | grep image: | grep linkerd | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt
./linkerd viz install --ha --skip-checks | grep images: | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt
Я понимаю, что поскольку они используют бинарный файл linkerd, они могут быть уникальными для приложения. Если это так, то мне придется выяснить, где я могу найти документацию, поскольку я не смог найти ее в их репозитории (поэтому я и пришел сюда в первую очередь)
Редактировать: Вот ошибка, которую я получил в скрипте:
UnicodeDecodeError: 'utf-8' codec: can't decode byte 0xe2 in position 49: Invalid continuation byte
Если я запущу первую команду в терминале, то получу:
sed: -e expression #1, char 1: unknown command: '[Question Mark Symbol]'
Я не так сильно беспокоюсь об ошибке как таковой, поскольку я не ожидаю прямого ответа на мой код Python. Я просто хотел бы понять, что делают сами команды со всеми этими причудливыми символами.
Меня попросили добавить код Python. Я использовал asyncio
'sзапустить функциюдля запуска большинства команд оболочки. Итак, сам код python прост:
asyncio.run(run(
"""./linkerd install --ha --ignore-cluster | grep image: | grep linkerd | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt"""))
Я также проверил двоичный файл linkerd, и он действительно похож на файл json.
решение1
Вот ответ, который я нашел
Проблема была не в каретке, а в апострофе. Человек, который дал мне команду, набрал ее на французской клавиатуре. Поскольку это на моем рабочем ПК, я набрал ее здесь, глядя на свой другой экран, поэтому я перепечатал правильный апостроф, не задумываясь об этом. Теперь, когда я изучил ошибки sed и то, что они означают, это имеет гораздо больше смысла. sed -e expression #1
— это первое слово после -e
(в данном случае 's/^
). Символ № 1 был бы '
тем, куда я должен был изначально заглянуть, если бы знал об этом заранее.