Dateimanager (Dolphin) "Öffnen mit" ... script.py

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JoS
User
Beiträge: 5
Registriert: Dienstag 26. Januar 2010, 23:07

hallo,

Situation: Ich habe ein Programm "Antony" (https://github.com/RausH/Antony) in Pyton/PyQt4 geschrieben. Das Programm speichert in einer sqlite Datei Metadaten für Bilder, die es in ein Verzeichnis kopiert, ab. Heute wollte ich dann aus Gewohnheit im Dateimanager (KDE bedingt: Dolphin) einen Rechtsklick auf eine solche Datenbank machen um dann im Kontextmenü "Öffnen mit" auszuwählen. Als Ziel habe ich dann Antony.desktop angegeben. Üblicherweise kann ich mit Antony.desktop das Programm einwandfrei starten, nur heute mit "Öffnen mit" ging nichts. Nicht weiter verwunderlich, habe ich doch in Antony keinen Code, der so etwas regeln könnte.

Versuch einer Lösung: Im ersten Ansatz ging ich davon aus, dass "Öffnen mit" das Programm startet und dann die Datei als Argument übergibt. Wenn ich den Dateinamen einmal habe, sollte alles weitere nicht so schwierig sein. Ich habe daher Antony etwas erweitert, nur um zu sehen, was da wie übergeben wird.

Code: Alles auswählen

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    for arg in sys.argv:
        print(arg)
Wenn ich jetzt Antony von der Konsole aus starte bekomme ich wie erwartet als Ausgabe den Pfad zu Antony.py. Ebenso, wenn ich die *.desktop Datei zum starten verwende. Wenn ich nun in der Konsole die sqlite Datei als Argument dazu schreibe, so bekomme ich erwartungsgemäß eine zweite Zeile mit dem Pfad zur sqlite Datei. Nur leider komme ich nicht weiter, da die Versuche mit "Öffnen mit" schon so bald fehlschlagen, dass ich nicht einmal die shell bekomme in der ich einen Output sehen könnte.

Frage: Habe ich "Öffnen mit" nicht verstanden? bzw. wie ist der Mechanismus von "Öffnen mit"? Kann es an meiner *.desktop Datei liegen? Was muss ich tun, damit "Öffnen mit" mit einem Python Programm funktioniert? Und weil ich will, dass das auch in Windows funktioniert, gibts da große Unterschiede aus der Sicht meines Programms?

Hier noch meine *.desktop Datei:

Code: Alles auswählen

[Desktop Entry]
Comment[de]=
Comment=
Exec=python2 /home/user/Antony_for_git/Antony.py
GenericName[de]=Datenbank zum Archivieren von Fotos
GenericName=Datenbank zum Archivieren von Fotos
Icon=/home/user/Antony_for_git/icon.png
MimeType=
Name[de]=Fotoarchiv - Antony Edge
Name=Fotoarchiv - Antony Edge
Path=/home/user/Antony_for_git
StartupNotify=true
Terminal=true
TerminalOptions=
Type=Application
Antony.py ist >1500 Zeilen, daher bei Bedarf bitte auf github ansehen.

Vielen Dank.
mit freundlichen Grüßen
Reinhard
deets

Ich kann das gerade nicht nachvollziehen - unterwegs. Aber eines fällt auf: du übergibst sys.argv erst an Qt, bevor du was ausgibst. Was passiert, wenn du zuerst die Argumente ausgibst?
lunar

@JoS: Du musst in der Desktop-Datei angeben, dass Dein Programm Argumente akzeptiert (siehe Exec).
JoS
User
Beiträge: 5
Registriert: Dienstag 26. Januar 2010, 23:07

@lunar: danke für den tip. leider habe ich keinen erfolg gehabt. ich habe folgendes probiert:

Code: Alles auswählen

...
Exec=python2 %U /home/jos/Prog/PfadiPhotoManager/Interface/english/Antony_for_git/Antony.py
oder:

Code: Alles auswählen

...
Exec=python2 %F /home/jos/Prog/PfadiPhotoManager/Interface/english/Antony_for_git/Antony.py
oder

Code: Alles auswählen

...
Exec=python2 /home/jos/Prog/PfadiPhotoManager/Interface/english/Antony_for_git/Antony.py %F
den letzten Fall habe ich auch mit u U und f probiert. Wie gesagt alles ohne erfolg.
weiteres nachdenken, recherchieren und spekulieren hat mich zu der schlussfolgerung veranlasst, dass wahrscheinlich die ersten beiden fälle am ehesten funktionieren müssten. dabei kann es zu problemen kommen, wenn dann die sqlite datei als erstes argument an das ausführbare programm übergeben wird. ich denke dieses ausführbare programm ist in meinem fall python2. und da python als solches mit einer sqlite datei nichts anfangen kann tut sich auch nichts.
bleibt mir noch zu erwähnen, dass ich auch immer probiert habe, das programm direkt mit der desktop datei zu starten, das hat in jedem fall funktioniert und in der konsole den pfad zu Antony.py ausgegeben, wie es sein soll.

@deets, danke ersteinmal. ich habe auch probiert, ob es etwas ändert, wenn ich

Code: Alles auswählen

if __name__ == "__main__":
    for arg in sys.argv:
        print(arg)
    app = QtGui.QApplication(sys.argv)
schreibe. Im grunde ändert sich nichts. ich kann das programm direkt starten (klick auf desktop icon), aber ich kann durch "Öffnen mit" wie im eingangspost beschrieben keine reaktion hervorrufen.

Also bleiben die fragen tw. noch offen bzw. jetzt neu: wie kann ich, wenn ich richtig spekuliert habe, eine nicht python datei an python übergeben die python dann an das skript weiter reicht? oder wie kann ich die reihenfolge der argumente beeinflussen, denn wenn ich in der konsole zuerst .../Antony.py und dann .../bilder.sqlite als argumente hin schreibe, bekomme ich ja beide pfade als ausgabe.

freundliche Grüße
JoS
Antworten