Seite 1 von 1

Ist Python für mich das richtige Werkzeug?

Verfasst: Montag 1. August 2005, 22:48
von hans1967
Hi Community,

Ich suche ein Skripting-Werkzeug für Linux. Letzte Woche wurde mir bei einer WindowsXP-Neuinstallation mal wieder drastisch klar, daß ich dieses Betriebssystem lediglich geleast habe. - Und zwar auf unbestimmte Zeit. Wenn Microsoft den Support irgendwann einstellt, kann ich es nicht mehr (zumindest nicht mehr legal) aktivieren. Was dem Faß jedoch den Boden ausschlug, war die Erfahrung, daß nach Installation von ServicePack2 das von der Installation angefertigte und auf eine weitere Festplatte übertragene Ghost-Image nicht mehr booten wollte. Über Nacht wurde mir Windows ein Betriebssystem für den Mülleimer. Eine Festplattenspiegelung muß verfügbar und binnen einer halben Stunde wieder lauffähig sein. Mit etwas anderem bin ich nicht bereit zu arbeiten. Das heißt, ich werde meine Freundin für ein Jahr in die Wüste schicken und mich währenddessen auf den steinigen Linux-Mönchsweg begeben. Python könnte ein Abschnitt dieses Weges sein.

Auf WindowsXP habe ich mir mit Hilfe des Werkzeugs "AutoHotKey" eine Arbeitsumgebung aus einem Dutzend Skripten unterschiedlichen Umfangs geschaffen, mit denen ich vorhandene Standard-Applikationen "fernsteuern" kann. Da ich kein Programmierer bin, hat mich das gut drei Monate Arbeit gekostet. Autohotkey ist nun stark auf Windows-Anwender-Bedürfnisse zugeschnitten. Sehr einfach lassen sich Fenster-Titel vorhandener Programme umbenennen, Fenster aktivieren, schließen, in der Größe verändern und positionieren. Es lassen sich Text-Strings manipulieren, und es kann mit Variablen gearbeitet werden. Loops und GoSub-Routinen sind möglich. Es können sogar Bild-Ausschnitte verglichen und auf Identität überprüft werden. Maus- und Tastatur-Eingaben lassen sich leicht makrofizieren. Auch GUI-Funktionen wie Splash-Fenster, quittierbare Message-Boxenund Input-Boxen gibt es vorgefertigt im Baukasten.

Die Frage an euch lautet: Werde ich in Python ein äquivalentes Skripting-Werkzeug vorfinden? Und wenn nicht, welche Alternativen gibt es?

Vielen Dank für eure Aufmerksamkeit.

Best regards,

hans1967

Verfasst: Montag 1. August 2005, 23:23
von BlackJack
Als Ersatz für das beschriebene Windowsprogramm kann Python wohl nicht herhalten. Python ist eine ganz "normale" Programmiersprache. Du suchst aber etwas ziemlich spezielles. Das könnte unter Linux dadurch erschwert werden, das es nicht eine GUI gibt, sondern verschiedene (QT, Gtk, Motif, usw.) und die "Fernsteuerung" bei allen etwas anders programmiert werden müsste. Mir sind leider keine Bibliotheken oder Programme bekannt, die so etwas leisten.

Verfasst: Montag 1. August 2005, 23:58
von hans1967
Hi BlackJack,

Vielen Dank für die prompte Antwort. Hatte mir insgeheim ein Posting der folgenden Art erhofft: "Unter Python kannst Du das alles auch haben, es ist aber nicht so mundgerecht." Um es abstrakter zu formulieren: "Die Features von Autohotkey sind als Teilmenge potentiell in Python enthalten, erfordern aber mehr Programmieraufwand." Mich auf eine GUI, bzw. einen Desktop zu beschränken, wäre kein Problem. Ein paar Makros müßte man mit Python doch hinkriegen, oder etwa nicht?

Best regards,

hans1967

Verfasst: Dienstag 2. August 2005, 08:36
von Mr_Snede
Du wirst auf Linux etwas anders denken müssen.
Es fällt mir etwas schwer zu formulieren, weil ich nicht genau verstanden habe, was du mit der Fernsteuerung meinst.

In Linux können die Meisten Programme mehr als nur gestartet werden.
Beispiel KDE-Videoplayer Kaffeine:

Code: Alles auswählen

kaffeine --help-all
Usage: kaffeine [Qt-options] [KDE-options] [options] [file] 

KDE options:
  --caption <caption>       Use 'caption' as name in the titlebar
  --icon <icon>             Use 'icon' as the application icon
  --miniicon <icon>         Use 'icon' as the icon in the titlebar
  --config <filename>       Use alternative configuration file
  --style <style>           sets the application GUI style
  --geometry <geometry>     sets the client geometry of the main widget
  --nofork                  Don't run in the background.

Options:
  -p, --play                Abspielen sofort starten
  -f, --fullscreen          In Vollbild-Modus starten
  -a, --audiodriver <argument> Audio-Treiber [default]
  -x, --videodriver <argument> Video-Treiber [default]
  -d, --device <argument>   Pfad zur Audio-CD/VCD/DVD setzen. 
(stark gekürzt)
Wie du siehst, bringt Kaffeine zB die Funktionen mit (von KDE geerbt) die Titelbar zu verändern: --caption <dein neuer Text>

Wie mein Vorredner schon anmerkte es hängt stark davon ab, welche Programme du miteinander kombinieren möchtest.

Beschreibe doch mal dein Lieblingsmakro dann können wir mehr sagen. Ich bin mal gespannt.
- Wobei das ja eher in die Linuxhilfe geht als Python direkt

cu Sebastian

Verfasst: Dienstag 2. August 2005, 11:20
von Leonidas
Für KDE könntest du es unter Python mit DCOP und unter GNOME mit CORBA versuchen.

Aber vielleicht kann man unter Linux dein Problem einfach irgendwie anders Lösen? Denn ich glaube nicht dass dein Problem es ist, Bildausschnitte aus dem Desktop zu vergleichen und festzustellen, ob sich was geändert hat ;)

Verfasst: Dienstag 2. August 2005, 11:35
von Mr_Snede
Genau deswegen habe ich nach seinem Lieblingsmakro gefragt.

Verfasst: Dienstag 2. August 2005, 11:54
von ProgChild
Das mit den Fenstertitel ändern, Fenster verschieben und schließen, das müsste doch mit der X11 Lib gehen. Dafür gibts doch nen Python wrapper... Das ist aber alles andere als einfach, da die XLib nich wirklich schönder Code ist.

Für Shortcuts gibts es das Programm XBindKeys. Mit dem kannst du Befehle mit einem Shortcut verknüpfen.

Ich denke, dass es schon in Python möglich ist. Python ist eine Programmiersprache, d.h. hier ist prinzipiell alles möglich (Du könntest auch einen Raytracer in Python schreiben. Ob das Sinn macht, ist eine andere Frage). Was du aber mal schauen solltest ist, ob es nicht schon eine Programm, dass deine Bedürfnisse befridigt, gibt.

Edit: Es geht nicht nur mit der XLib. Mit GTK+ sollte es auch gehen. Das kapselt die XLib etwas schöner.

Verfasst: Dienstag 2. August 2005, 22:48
von hans1967
:D

Hi Community,

Vielen Dank für eure interessanten Brainstorming-Beiträge zu meiner Problemstellung. Leider konnte ich wegen Vielbeschäftigung nicht früher antworten. Sorry. Was tun meine AutoHotKey-Skripte? Sie tun einfache Dinge. Eins meiner umfangreichen Skripte steuert einen Browser fern. Es werden bestimmte WWW-Informationen gebrowst und abgespeichert. Es sind so viele, daß es unmöglich wäre, es von Hand zu tun. Hierzu wird der Browser per Skript gestartet, mehrere Browserfenster geöffnet und im Turnus die Informationen aus den einzelnen Fenstern angefordert und abgespeichert. Da die Informationen nicht einfach über URL downloadbar sind, führt bei meiner Problemstellung kein Weg an der Browser-Fernsteuerung vorbei. Sind alle Informationen unter Dach und Fach, wird die Internet-Verbindung getrennt, der Browser-Cache geleert und danach der Rechner automatisch heruntergefahren. Zwischendurch laufen Prüf-Routinen, ob nicht im Schweinsgalopp etwas vergessen wurde. Die vergessenen Informationen werden gelistet und erneut angefordert. Ein anderes Skript steuert ein Datei-Konvertier-Werkzeug fern. Auch dieses wird per Skript aufgerufen. Daraufhin wird ein Optionen-Menü innerhalb dieser Applikation aufgerufen und per Skript konfiguriert (d.h. es werden ein paar Häkchen gesetzt oder verändert oder auch beibehalten). Sind die Dateien konvertiert worden, werden sie vom Skript automatisch vervielfältigt und in bestimmte Verzeichnisse einsortiert. Weitere Skripte schalten, aufgerufen durch spezifische HotKeys, zwischen Fenstern hin und her. Alles so, daß das Hin- und Her-Schalten zwischen den Fenstern nicht Sekunden, sondern nurmehr Bruchteile von Sekunden benötigt. Ein anderes Skript beaufsichtigt ein weiteres Skript: Wenn es hängen bleibt, wird der Rechner heruntergefahren. Die größeren Skripte schreiben auch mehr oder weniger umfangreiche LogFiles über den Fortgang ihres Tuns oder auch Störungen im Ablauf. Andere Skripte führen komplexe Kopier- und Lösch-Aktionen durch und erstellen in bestimmten Fällen automatisch neue Verzeichnisse. Eines meiner Skripte, die ich auch im AutoHotKey-Forum veröffentlicht habe, da es von allgemeinem Interesse sein könnte, ist ein Fenster-Manager, der alle geöffneten Fenster nach Titel numeriert auflistet und per Nummerneingabe aktivierbar macht.

So'n Zeuch nenn ich meine Arbeitsumgebung. Ich hoffe, es ist ein wenig klarer geworden, was ich eventuell demnächst mit Python unter Linux machen möchte.

In freudiger Erwartung weiterer Kommentare und Anregungen ...

Best regards,

hans1967

Verfasst: Dienstag 2. August 2005, 23:04
von Leonidas
Unter KDE funktioniert sowas problemlos mit DCOP (zumindest der Browser-Part), das es in Debian Paket python-dcop und in anderen Distributionen in kdebindings geben könnte.

Das Konvertierprogramm kann man unter Linux sicherlich auch mit Optionen steurtn, so dass Python gar nicht notwendig ist.

Ein Script auf funktionieren überprüfen ist auch möglich, sowas ist oft bei Sysrversoftware im Einsatz, dass wenn der Server wegstirbt er neu gestartet wird.

Logfiles schreiben ist mit dem logging-Modul kein Problem. Das Modul ist einfach zu verwenden, jedoch erlaubt es auch komplexeres (war aber bei mir noch nie nötig).

Kopieren und Löschen ist unter Python keinerlei Problem.

Verfasst: Mittwoch 3. August 2005, 01:58
von Joghurt
Wobei du in Python direkt die Webseiten vom Netz laden und die entsprechenden Daten runterladen kannst.

Ich würde sagen, du wirst dich unter Linux/mit Python umgewöhnen müssen, da du direkt programmierst, was du möchtest und nicht mehr mit irgendwelchen Fenstern rumhantierst. Also: einige Einarbeitungszeit, ein paar Wochen vielleicht, dafür wird es dann aber später auch schneller(*) und eleganter gehen.

Diese Fernsteuerungssachen sind zwar für kleine Arbeiten ganz nützlich, aber bei so komplexen Sachen wie du es gemacht hast, hat man wahrscheinlich mehr Arbeit als mit einer guten "Skriptsprache" wie Python.

(Beispiel: Um zu schauen, ob das Wort "wetter" auf der ersten Seite der tagesschau zu finden ist, reicht ein

Code: Alles auswählen

import urllib
print "Wetter" in urllib.urlopen("http://www.tagesschau.de").read()
Das ist natürlich ein stark vereinfachtes Beispiel, aber das Prinzip sollte klar sein)

(*) Mit schneller meine ich hier, dass neuere Aufgaben schneller als mit deiner alten Methode zu bewältigen sind.

Mein Tipp: Lade dir einfach mal die Windowsversion von Python runter und versuche, deine Makros in Python nachzuschreiben (da hast du gleich einen gute Vergleichmöglichkeit, ob auch die Daten übereinstimmen). Das geht natürlich nicht von heute auf morgen, aber bei Problemen findest du hier sicherlich gute Hilfe.

Verfasst: Mittwoch 3. August 2005, 08:11
von Mr_Snede
Auch wenn es nun nicht Python ist, schau mal hier nach was man mit der Linux Shell so zaubern kann. Damit du mal ein Gefühl bekommst.

Sowas geht auch mit Python.
Ich scließe mich Joghurt an: Python runterladen, im Forum die "Links und Tutorials" besuchen und einfach anfangen. ZB direkt mit dem Code, den Joghurt postete. Versuch einfach mal die Tagesschauseite als html Datei auf deinem Rechner zu speichern.
Und dann halt Schritt für Schritt weiter. Solange du selber versuchst, liest und googlest kannst du dem Forum Löcher in den Bauch fragen.

Viel Spass Sebastian

Verfasst: Mittwoch 3. August 2005, 10:56
von hans1967
:D

Hi Community,

Vielen Dank für eure umfassenden Anregungen und Hinweise. Ich gehe mal davon aus, daß ich meine Problemstellung mit Shellscripting, Python und XBindKeys zufriedenstellend beackern kann. Ich werde mich demnächst damit auseinandersetzen. Jetzt geht es erst mal darum, überhaupt Linux vernünftig zum Laufen zu bekommen auf meiner Kiste. Das größte Problem, nämlich einen Treiber für meinen Canon-Drucker zu finden, scheint jedenfalls gelöst (zumindest theoretisch). Wenn sich neue, konkrete Fragen auftun, werde ich mich gerne wieder an euch wenden.

Best regards,

hans1967