Zeichkette in Variable übergeben
-
tutter -
23. November 2017 um 14:41 -
Erledigt
-
-
Zeichkette in Variable übergeben? Schau mal ob du hier fündig wirst!
-
An was liegt das ? Was mach ich falsch? die Kochkommata sowie die Leerzeichen verwirren mich.
-
-
An was liegt das ? Was mach ich falsch?
Siehe https://docs.python.org/2/tutorial/dat…s-and-sequences
-
- Offizieller Beitrag
Oder du benutzt das Modul, das für solche Fälle vorgesehen ist: argparse
-
Das ergibt aber nur
Der TS will aber
Oder sehe ich das falsch?
Es sei denn, man übergibt als 2. Param nicht "LOW" als String sondern den Int-Wert, ich nehme an "0".
-
danke euch allen erst mal für eure Antworten.
Eine Zeichenverkettung geht auch mit + << das wusste ich gar nicht das das auch geht!
Das Ergebnis ist genau dann das was ich haben will! Aber wie kann ich denn jetzt arg ausführen lassen?
-
Lass dir in der interaktiven Python Konsole einfach mal den Wert von GPIO.LOW anzeigen - dann siehst du was sich dahinter verbirgt
Entsprechend reicht es wenn man beim ausführen des Scripts als zweiten Parameter 0 oder 1 übergibt, eben um den I/O HIGH oder LOW zu setzen:
False entspricht 0, True entspricht 1.
Daraus resultiert dass es relativ egal ist ob man
GPIO.output(17, GPIO.HIGH)
oder
GPIO.output(17, True)
oder
GPIO.output(17, 1)
setzt...Es gehört einfach nur zur Sorgfalt und zum guten Style es entsprechend des Modules auch anzuwenden - also erstere Schreibweise zu nutzen.
Es ist aber allgemein nicht sehr ratsam direkt sys.argv[1] usw einzubinden, ich nahm daher an das du nur ein Beispiel sehen willst, das so aber nicht produktiv einsetzen wirst...
Produktiv im Script solltest du vorher prüfen ob und überhaupt ein zulässiger Wert übergeben wurde, den dann in eine Konstante setzen und nur noch die Konstante an entsprechender Stelle einsetzen/verknüpfen.
Warum du "arg" überhaupt derart definieren willst finde ich etwas seltsam. GPIO.output() ist ein Methoden-Aufruf, du aber willst anscheint nur Text in arg hinterlegen?
-
meigrafd das ist ja klasse das das auch geht
Nein eigenlich würde ich gern den ganzen Text in arg einfach "ausführen" lassen. Ich kenne das aus anderen Sprachen wie T-SQL. Da schreibe ich erstmal schön alles in eine Variable und führe den "Inhalt" also den Text aus.
Geht das bei python nicht?
ich kann natürlich auch die Methode nutzen und diese mit Variablen fülllen.
-
Was soll denn das Ziel sein? Wieso möchtest du das so machen?
-
Hallo,
ZitatGeht das bei python nicht?
Es geht viel, aber das ist ein sehr schlechter Stil. Python Funktionen / Klassen übergibt man Argumente direkt, nicht über den Umweg Textstring. Wenn du Argumente beim Aufruf des Programms braucht, dann kann man `sys.argv` nehmen - besser ist aber das genannte argparse-Modul, weil du damit in einem eine Eingabevalidierung bekommt und den richtigen Datentyp.
Abgesehen davon ist Python wohl auch auch nicht mit T-SQL vergleichbar. Weder vom Umfang noch von dem, wofür die Sprache gedacht ist.
Gruß, noisefloor
-
Ziel ist es eine Funktion zu schreiben die mir Relais schaltet. Das ganze soll am Ende soweit gehen das ich alles über php steuern kann.
Python
Alles anzeigen#!/usr/bin/python #Import: import sys import time import RPi.GPIO as GPIO #Deklaration: GPIO.setmode(GPIO.BCM) #Definition der GPIO Ports # 1 = Low und 0 = HIGH GPIO.setup(int(sys.argv[1]), GPIO.OUT) if int(sys.argv[2]) == 1: print "ausschalten" GPIO.output(int(sys.argv[1]), int(sys.argv[2])) elif int(sys.argv[2]) == 0: print "anschalten" GPIO.output(int(sys.argv[1]), int(sys.argv[2])) else: print "Fehler im Parameter 2" time.sleep(3) GPIO.cleanup()
Das ist der aktuelle Stand. Ihr könnt ja gern mal sagen was ihr davon haltet.
-
Das ganze soll am Ende soweit gehen das ich alles über php steuern kann
Ne oder?!
-
Hallo Tutter,
in einer anderen Programmiersprache wäre die Lösung so einfach, dass ich mich gar nicht traue, die Lösung zu posten.
...
aber
...
ich bin ja mutig:
oder mehr Icon-Style:
Hm... 16 LOC in Python, deren 4 LOC in Icon... na ja, egal ...
Ein Sinn der Notwendigkeit eines solchen Codes will sich mir aber keineswegs erschließen...
Beste Grüße
Andreas
-
Das ganze soll am Ende soweit gehen das ich alles über php steuern kann.
...Dann verzichte bitte auf PHP und behandel alles in Python. Damit tust du dir selbst einen riesigen Gefallen - really.
FAQ => Nützliche Links / Linksammlung => [Python] Webserver, Websocket und ein bisschen AJAX
-
ja das ist sicher richtig! aber nicht das was ich will! ich will genau den weg gehen! ich weiß das geht auch einfacher.
ich bin da eigen
und funktionieren tut es ja auch schon dank der hilfe hier im Forum!
zur zeit quäle ich mich nur mit statusabfragen unter bcm ab. es muss doch möglich sein auch unter bcm zu erfragen wie der Status von zb. Port 2 ist! bei wiring gibt es sogar readall aber wie läuft das unter bcm?
PS: ich habe hier keinen kommerziellen Gedanken dahinter und habe viel Zeit mir das Hirn zu zermaddern! PHP ist eben eine Sprache der ich einigermaßen mächtig bin und python ist die sprache die ich zusätzlich lernen will. Damit die etwas umständliche Vorgehensweise.
-
Wenn du Python lernen willst ist es aber IMHO der beste Weg sowas umständliches wie Vermischung unterschiedlicher Programmiersprachen, zu vermeiden.
Wenn du Python lernen willst dann nutze nur Python und lass PHP sowie einen Webserver wie apache2 weg.
Du brauchst nur ein einziges Script: web_bottle.py
In nur diesem einen Script handelst du alles ab, da steht sowohl der Webserver bottle drin als auch die Behandlung der GPIO's. Den HTML/JS Code deiner bisherigen Seite kannst du behalten, einzig das was du bisher in PHP geschrieben hast musst du in Python portieren.
Und natürlich kann man den Status eines GPIOs abfragen. Aber keine Ahnung was du mit bcm meinst? Vermischung falscher Begrifflichkeiten?
-
-
BCM an dieser Stelle beschreibt nur, welche Nummerierung RPi.GPIO verwendet.
Hier hast du die Wahl zwischen BCM und BOARD.
-
-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!