Ich möchte die Ausgabe von einem Linux jq
Aufruf in ein Python-Skript, das die Ausgabe jq
json str dekodieren und Dinge damit tun wird.Parsing Eingabe argv JSON Zeichenfolge
Der Ausgang meines jq
Anruf jq '.geometry' myJson.json
so etwas wie diese:
{
"coordinates": [
[
[
5,
2
],
[
5.4,
3
],
[
3,
2.1
]
]
],
"crs": {
"properties": {
"name": "foo"
},
"type": "name"
},
"type": "Polygon"
}
ich ein kleines Python-Executable geschrieben habe, die die Ausgabe json Zeichenfolge in Python-Objekte und dann Dinge tun, dekodiert:
import collections
import json
import sys
import logging
if __name__ == '__main__':
try:
geoJsonStr = str(sys.argv[1:])
print geoJsonStr ## This for some reason only prints an empty slice '[]'
data = json.loads(geoJsonStr)
coordinates = data['coordinates'] ## TypeError: list indices must be integers, not str
## Do things here
except ValueError as e:
logging.error(e.message)
exit(1)
So versuche ich es zu nennen:
Ich erhalte jedoch einige Python-Fehler, wie oben in meinem Code-Snippet erwähnt. Ich denke, es ist die Art, wie ich die jq
Ausgabe in meine Python-ausführbare Datei übergebe. Irgendwie wird die gesamte JSON-Zeichenfolge nicht als argv
-Argument aufgenommen.
Mein erster Fehler ist die print GeoJsonStr
druckt eine leere []
Scheibe aus argv[1:]
. Daher übergebe ich die json-Zeichenfolge wahrscheinlich fälschlicherweise in das Python-Skript. Der nachfolgende Fehler ist:
coordinates = data['coordinates']
TypeError: list indices must be integers, not str
Dies ist wahrscheinlich mehr oder weniger, weil es nichts zu entschlüsseln.
Wenn Sie:
Der Ausgang wie so aussehen sollte Wenn Sie Fehler bekommen, müssen Sie sie hier einfügen. – Carcigenicate
Möglicherweise die gleiche Frage wie [Wie mache ich ein Python-Skript "pipable" in bash?] (Https://stackoverflow.com/questions/4429966/how-to-make-a-python-script-pipeable-in- bash) Vielleicht wird diese Frage helfen –