
Ich schreibe gerade ein Python-Skript auf einer CentOS 7-VM, das nebenbei ein paar Shell-Befehle ausführen muss. Ich habe eine Bibliothek gefunden, die das erledigt, aber bei einem davon tritt ein Fehler auf. Ich habe diese Befehle aus einer Textdatei erhalten, also weiß ich nicht wirklich, was sie tun. Einfache Befehle verstehe ich, aber diese hier sind über meinem Niveau. Da nur zwei Zeilen einen Fehler aufweisen, weiß ich, dass es nicht am Skript selbst liegt, sondern an der Art, wie ich es verwende. ./linkerd
istLinkerdsBinärdatei, während linkerd_images.txt eine Liste von Bildern enthält:
./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
Mir ist klar, dass sie, da sie die Binärdatei von linkerd verwenden, möglicherweise für die Anwendung einzigartig sind. Wenn das der Fall ist, muss ich herausfinden, wo ich die Dokumentation finden kann, da ich sie in ihrem Repo nicht finden konnte (weshalb ich zuerst hierher gekommen bin).
Bearbeiten: Hier ist der Fehler, den ich im Skript erhalten habe:
UnicodeDecodeError: 'utf-8' codec: can't decode byte 0xe2 in position 49: Invalid continuation byte
Wenn ich den ersten Befehl allein im Terminal ausführe, erhalte ich:
sed: -e expression #1, char 1: unknown command: '[Question Mark Symbol]'
Der Fehler selbst bereitet mir weniger Sorgen, da ich keine direkte Antwort auf meinen Python-Code erwarte. Ich möchte einfach nur verstehen, was die Befehle selbst mit all den ausgefallenen Zeichen machen.
Ich wurde gebeten, den Python-Code hinzuzufügen. Ich habe asyncio
's verwendetFunktion ausführenum die meisten Shell-Befehle auszuführen. Der Python-Code selbst ist also einfach:
asyncio.run(run(
"""./linkerd install --ha --ignore-cluster | grep image: | grep linkerd | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt"""))
Ich habe auch die Binärdatei von Linkerd überprüft und sie sieht tatsächlich wie eine JSON-Datei aus.
Antwort1
Hier ist die Antwort, die ich gefunden habe
Das Problem war nicht das Zirkumflex, sondern das Apostroph. Die Person, die mir den Befehl gab, tippte ihn mit einer französischen Tastatur. Da er auf meinem Arbeits-PC ist, tippte ich ihn hier ein, indem ich auf meinen anderen Bildschirm schaute, also tippte ich ohne nachzudenken ein richtiges Apostroph erneut ein. Nachdem ich mir nun die Fehler von sed und ihre Bedeutung angesehen habe, macht es viel mehr Sinn. sed -e expression #1
ist das erste Wort nach -e
(in diesem Fall 's/^
). Zeichen Nr. 1 wäre, '
und dort hätte ich zuerst nachsehen sollen, wenn ich vorher davon gewusst hätte.