Variable in Python festlegen; in einem Shell-Script benutzen

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.
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Beitragvon Ubuntuxer » Samstag 19. April 2008, 16:38

Der User mit dem du das Programm aufrufst, ist nicht gleich dem User mit der X-Session. Es muss der gleiche User sein, denn normalerweise dürfen fremde User keine Fenster in der X-Session öffnen.

Ich habe aber nur einen Bentzeraccount auf dem Rechner.
Statt gksu könntest du sudo nehmen...

Aber ich müsste doch dann das Passwort im Terminal eingeben, aber ich will eigentlich weg von der Konsoleneingabe :?

Könnte es vielleicht daran liegen das ich Hardy benutze und dass es wegen dem neuen PolicyKit Probleme gibt. Bug? Was mich vor allem wundert ist, dass es bei os.system ohne Probleme geklappt hat.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Beitragvon Trundle » Samstag 19. April 2008, 16:42

``'DISPLAY': os.environ['DISPLAY']`` noch in das env-dict von subprocess.Popen packen.
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Beitragvon Ubuntuxer » Samstag 19. April 2008, 17:23

Ich habs mal eingefügt:

Code: Alles auswählen

subprocess.Popen(['gksu', script_path], env = {'var': 'a', 'DISPLAY': os.environ['DISPLAY']})

aber immer noch bekomme ich nur eine Fehlermeldung
No protocol specified
(gksu:5872): Gtk-WARNING **: cannot open display: :0.0

Hat noch jemand eine Idee?

PS: Meine absolute Notlösung wäre eine temporöre Bash-Script Datei mit Python zu erzeugen, welche dann die Variable an das andere Bash-script übergibt und die Passwortabfrage übernehmen würde.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 19. April 2008, 21:23

Du kannst aber auch versuchen, dein gesamtes Environment bei env mit einzupacken und dann nur um die Variablen die du brauchst zu ergänzen. Ist warscheinlich sowieso schlauer.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Beitragvon Ubuntuxer » Samstag 19. April 2008, 22:08

Tut mir leid, aber ich verstehe nicht was du mit Environment meinst. :(
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 19. April 2008, 22:22

Ubuntuxer hat geschrieben:Tut mir leid, aber ich verstehe nicht was du mit Environment meinst. :(

Deine Umgebungsvariablen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Beitragvon Ubuntuxer » Samstag 19. April 2008, 22:45

Ok, aber ich verstehe das trotzdem noch nicht so ganz. Wie soll ich denn alle Umgebungsvariablen bei env einpacken?
Wie genau hilft mir das bei meinem Problem mit gksu?

PS: Ich habs auch mal mit kdesudo probiert gleiches Problem wie gksu.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 19. April 2008, 22:48

Ubuntuxer hat geschrieben:Ok, aber ich verstehe das trotzdem noch nicht so ganz. Wie soll ich denn alle Umgebungsvariablen bei env einpacken?

``env=os.environ`` zum testen. Wenn es dann tut, dann heißt es, dass es neben $DISPLAY noch weitere Umgebungsvariablen benötigt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Beitragvon Ubuntuxer » Samstag 19. April 2008, 23:02

Es funktioniert leider nicht, hängt sich nun ohne Fehlermeldung einfach auf.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 21. April 2008, 09:41

Ubuntuxer hat geschrieben:Es funktioniert leider nicht, hängt sich nun ohne Fehlermeldung einfach auf.

Ich denke nicht, das es sicht aufhängt, sondern wahrscheinlich einfach blockiert, weil auf eine Eingabe gewartet wird. Vielleicht läuft ja gksu irgendwo und du siehst es nur nicht.

Aber nochmal, warum verwendest du nicht das normal "sudo" so das der User im Terminal das Passwort eingeben kann?

Teste doch mal, was passiert, wenn du den selben Aufruf per sh script machst. Funktioniert es dann?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Montag 21. April 2008, 09:49

jens hat geschrieben:Aber nochmal, warum verwendest du nicht das normal "sudo" so das der User im Terminal das Passwort eingeben kann?

Falls sich das nicht in der Zwischenzeit geaendert hat, geht das nicht, da su, sudo etc nur Passwoerter nehmen, die ueber ptys/ttys kommen, nicht ueber Pipes. Siehe z.B. in diesem Thread.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Beitragvon Ubuntuxer » Montag 21. April 2008, 15:15

Aber nochmal, warum verwendest du nicht das normal "sudo" so das der User im Terminal das Passwort eingeben kann?

Ich möchte das Script in einer GUI starten und dann ist es ziemlich blöde wenn man das Passwort im Terminal eingeben muss.
Falls sich das nicht in der Zwischenzeit geaendert hat, geht das nicht, da su, sudo etc nur Passwoerter nehmen, die ueber ptys/ttys kommen, nicht ueber Pipes. Siehe z.B. in diesem Thread.

danke, dies dürfte das Problem lösen;
Ich möchte aber eigentlich unoffizielle Pythonmodule vermeiden, deshalb habe ich mich entschlossen das Problem zu lösen, indem ich das Script so verändere das es sich selbst mit root rechten aufruft, da ich sowieso an dem Script etwas verändern muss und es deshalb komplett in eine Liste speichern muss, oder würdet ihr mir davon wehemend abraten?
defiance
User
Beiträge: 6
Registriert: Montag 21. April 2008, 02:29

Beitragvon defiance » Montag 21. April 2008, 17:12

Besteht bei GKSU nicht, wie sudo auch, die Möglichkeit auf die Passworteingabe zu verzichten?
Eine weitere, wenn auch sehr häßliche Methode die Umgebungsvariablen zu benutzen ist diese in sudo oder bei dir gksu mit rein zu packen.
Aber nachdem ich diesen Thread gelesen habe, werde ich wohl auch die Variante mit dem Subprozess probieren, diese sieht für mein Problem sehr vielversprechend aus und ist wesentlich eleganter als mein Ansatz.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder