Seite 1 von 1

Parameter aus Variablen übergeben

Verfasst: Sonntag 20. Juni 2021, 14:30
von Knocky
Hallo Forum!

Vorweg muss ich erst einmal sagen:
1) Dies ist mein erster Beitrag
2) Ich bin zwar erfahren in anderen Programmiersprachen, aber in Python ein totaler Newbie :-(

Aktuell bastel' ich an einem kleinen Programm für meinen Raspberry. An diesen habe ich einen kleinen Thermodrucker angeschlossen und ich benutze "escpos" (https://github.com/python-escpos/python-escpos), um mit ihm zu drucken.

Der Drucker wird beim Start meines Programmes wie folgt initialisiert und beispielsweise genutzt:

Code: Alles auswählen

from escpos import *
drucker = printer.Usb(0x0525,0xa700)
drucker.text("Hallo Forum")
drucker.cut()
Funktioniert alles super! Nun habe ich aber mehrere dieser Drucker ... gleicher Hersteller, aber unterschiedliche Modelle. Somit ändert sich die Vendor/Model-ID, wenn ich zwischen den Druckern wechsle. Damit ich dies nicht im Programm-Code jedes Mal ändern muss, habe ich die Vendor und die Model-ID's in einer Sqlite-Datenbank hinterlegt.

Nun meine Frage bzw. mein Problem:
Wie übergebe ich im obigen Code die Parameter aus Variablen? Folgendes Beispiel was NICHT funktioniert:

Code: Alles auswählen

from escpos import *
vendor = "0x525"
model = "0xa700"
drucker = printer.Usb(vendor,model)
Ich freue mich auf Eure Tipps und bedanke mich schon mal hierfür!
Viele Grüße,
Knocky

Re: Parameter aus Variablen übergeben

Verfasst: Sonntag 20. Juni 2021, 14:39
von __deets__
Das eine sind strings. Das andere (funktionierende) Zahlen. Das ist auch in nahezu allen anderen Sprachen ein Unterschied.

Re: Parameter aus Variablen übergeben

Verfasst: Sonntag 20. Juni 2021, 14:51
von Sirius3
Statt die Vendor und Model-IDs anzugeben, könntest Du auch einfach nach dem Drucker suchen.
Da Du sowieso schon pyusb einsetzt, steht das hier (https://github.com/walac/pyusb/blob/mas ... torial.rst) wie man das macht.

Benutze keine *-Importe, sondern importiere `printer` explizit.

Re: Parameter aus Variablen übergeben

Verfasst: Sonntag 20. Juni 2021, 15:01
von Knocky
Hallo __deets__!
Vielen Dank für die schnelle Antwort. Was ein String ist, ist mir schon bekannt ;-)
Und in anderen Sprachen funktioniert das auch so ... z.B. php:

Code: Alles auswählen

$imap = '{imap.abc.de:993/imap/ssl}INBOX';
$mail = 'abc@abc.de';
$pass = 'geheim';
$inbox = imap_open($imap, $mail, $password) or die ('Verbindung fehlgeschlagen: ' . imap_last_error();
Hallo Sirius 3!
Vielen Dank für die beiden Hinweise. Den Import habe ich geändert, den Link werde ich mir jetzt mal durchlesen.
Aber mich würde dennoch interessieren, wie sowas generell unter Python gemacht werden kann!

Re: Parameter aus Variablen übergeben

Verfasst: Sonntag 20. Juni 2021, 15:07
von narpfel
@Knocky:

Code: Alles auswählen

>>> int("0x525", 16)
1317
Zur Einführung (besonders wenn du schon programmieren kannst) solltest du dir das Tutorial mal angucken (und die Dokumentation zu `int`).

PHP ist schwach typisiert, d. h. dass Typen wie es passt (oder auch nicht passt) automatisch in einander umgewandelt werden. Python ist stark typisiert, weil die Python-Entwickler der Meinung sind, dass implizite Typumwandlungen zu schwer zu findenden Fehlern führen.

Re: Parameter aus Variablen übergeben

Verfasst: Sonntag 20. Juni 2021, 15:14
von __deets__
Knocky hat geschrieben: Sonntag 20. Juni 2021, 15:01 Hallo __deets__!
Vielen Dank für die schnelle Antwort. Was ein String ist, ist mir schon bekannt ;-)
Und in anderen Sprachen funktioniert das auch so ... z.B. php:
PHP ist eine der wenigen Sprachen, die eben genau nicht zwischen Strings und Zahlen unterscheiden. Wenn irgendwo eine Zahl gebraucht wird, aber ein String reingegeben wird, dann wird da auf Teufel komm raus versucht, etwas zahlartiges draus zu machen. Geht oft gut. Bis es das einmal nicht mehr tut, und das grosse Kopfkratzen anfaengt.

Und darum machen Python und nahezu alle anderen Sprachen das nicht. Sondern verlangen eine explizite Umwandlung. Und das beantwortet auch deine Frage:

Code: Alles auswählen

from escpos import *
vendor = 0x525
model = 0xa700
drucker = printer.Usb(vendor,model)
Das war es schon. Sternchenimporte hat Sirius3 ja schon angesprochen.

Re: Parameter aus Variablen übergeben

Verfasst: Sonntag 20. Juni 2021, 19:55
von Knocky
Super!
Vielen herzlichen Dank für Eure Antworten , Erläuterungen und Vorschläge :-)
Das hat mir sehr weiter geholfen!

Viele Grüße + noch einen schönen Sonntag-Abend,
Knocky