ubuntuusers.de

Array als Parameter an Pythonfunktion übergeben

Status: Gelöst | Ubuntu-Version: Kubuntu 14.04 (Trusty Tahr)
Antworten |

nitsnatsnok

Avatar von nitsnatsnok

Anmeldungsdatum:
27. Oktober 2013

Beiträge: 160

Hallo, ich möchte die Python-Library macropolo von http://ubuntuforums.org/showthread.php?t=2155281 in einem Bashskript nutzen. Für einige der enthaltenen Funktionen ist es (meinem Verständnis nach) nötig, ein Array als Parameter zu übergeben, z.B. hier (gekürzt):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def pixel_color_in_area_counter(rectangle, color):
    """ …
    The rectangle is a tuple [x, y, width, height], where x, y the
    coordinates of the top left corner and width, height the width
    and the height of the rectangle.
    … """
    x = rectangle[0]
    y = rectangle[1]
    width = rectangle[2]
    height = rectangle[3]
    ...

Im Bashskript rufe ich die Funktion mit

1
python -c "import macropolo; print macropolo.pixel_color_in_area_counter(test[@],#000000)"

auf, aber wie übergebe ich der Funktion das Array (wie dargestellt funktioniert es freilich nicht)?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13190

nitsnatsnok schrieb:

Im Bashskript rufe ich die Funktion mit

1
python -c "import macropolo; print macropolo.pixel_color_in_area_counter(test[@],#000000)"

auf, aber wie übergebe ich der Funktion das Array (wie dargestellt funktioniert es freilich nicht)?

Bin zwar kein Python-Programmierer, aber das lässt sich recht schnell rausfinden. So sollte es gehen:

1
python -c 'import sys; import macropolo; print macropolo.pixel_color_in_area_counter(sys.argv[1:], #000000)'

dAnjou

Avatar von dAnjou

Anmeldungsdatum:
8. Oktober 2007

Beiträge: 872

Wohnort: Berlin

Warum schreibst du nicht das ganze Skript einfach in Python?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13190

dAnjou schrieb:

Warum schreibst du nicht das ganze Skript einfach in Python?

Eine berechtigte Frage. Allerdings verschiebt das das Problem ja nur, dass man die Kommandozeilenargumente in ein Array umwandeln muss. ☺

nitsnatsnok

(Themenstarter)
Avatar von nitsnatsnok

Anmeldungsdatum:
27. Oktober 2013

Beiträge: 160

dAnjou schrieb:

Warum schreibst du nicht das ganze Skript einfach in Python?

Na weil ich das nicht kann. 😉 Sicher, man könnte sich einarbeiten, aber nur wegen so einer einfachen Sache… So schwer kanns doch eigentlich nich sein, oder?

rklm schrieb:

1
python -c 'import sys; import macropolo; print macropolo.pixel_color_in_area_counter(sys.argv[1:], #000000)'

gibt im Skript keinerlei Ausgabe. Was hätte da passieren sollen?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13190

nitsnatsnok schrieb:

rklm schrieb:

1
python -c 'import sys; import macropolo; print macropolo.pixel_color_in_area_counter(sys.argv[1:], #000000)'

gibt im Skript keinerlei Ausgabe. Was hätte da passieren sollen?

Ich kenne ja die Funktion nicht. Soweit ich das auf die Schnelle sehe, soll die eine Zahl auswerfen. Hast Du das denn mit mindestens vier Argumenten aufgerufen? Also

1
python -c 'import sys; import macropolo; print macropolo.pixel_color_in_area_counter(sys.argv[1:], #000000)' 11 22 33 44

nitsnatsnok

(Themenstarter)
Avatar von nitsnatsnok

Anmeldungsdatum:
27. Oktober 2013

Beiträge: 160

So ist es, als Parameter nimmt sie ein Array mit x, y, Breite und Höhe sowie eine Farbe, sucht dann alle Pixel im angegebenen Bereich ab und gibt aus, wie viele davon die Farbe haben. Die Argumente sollten eigentlich in die Klammer direkt hinter den Funktionsnamen, aber wie ich da das Array reinbekomme…

Edit: Hab mich mal n bisschen belesen, Python unterscheidet Listen, Arrays und Tupel. Da in den Kommentaren immer von Tupeln die Rede ist, soll es wohl ein Tupel sein, das man mit tupel=(1,2,3,4) definiert und einfach mit seinem Namen aufruft. Leider geht aber

1
python -c 'import macropolo; tupel = (1,2,3,4); print macropolo.pixel_color_in_area_counter(tupel,#000000)'

nich. ☹

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13190

nitsnatsnok schrieb:

So ist es, als Parameter nimmt sie ein Array mit x, y, Breite und Höhe sowie eine Farbe, sucht dann alle Pixel im angegebenen Bereich ab und gibt aus, wie viele davon die Farbe haben. Die Argumente sollten eigentlich in die Klammer direkt hinter den Funktionsnamen, aber wie ich da das Array reinbekomme…

Edit: Hab mich mal n bisschen belesen, Python unterscheidet Listen, Arrays und Tupel. Da in den Kommentaren immer von Tupeln die Rede ist, soll es wohl ein Tupel sein, das man mit tupel=(1,2,3,4) definiert und einfach mit seinem Namen aufruft. Leider geht aber

1
python -c 'import macropolo; tupel = (1,2,3,4); print macropolo.pixel_color_in_area_counter(tupel,#000000)'

nich. ☹

Dann hast Du wohl ein grundsätzlicheres Problem. Da kann ich Dir im Moment nicht helfen.

Übrigens kannst Du das Array so in ein Tuple umwandeln:

1
python -c 'import sys; import macropolo; print macropolo.pixel_color_in_area_counter(tuple(sys.argv[1:]), #000000)' 11 22 33 44

nitsnatsnok

(Themenstarter)
Avatar von nitsnatsnok

Anmeldungsdatum:
27. Oktober 2013

Beiträge: 160

Hrmpf, mit dem Tupel war alles in Ordnung, es hakte am zweiten Parameter: Die Farbe muss als String in Anführungszeichen geschrieben werden. … Danke für eure Hilfe!

Antworten |