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

Variable in Python festlegen; in einem Shell-Script benutzen

Beitragvon Ubuntuxer » Donnerstag 17. April 2008, 16:48

Das Problem sieht wie folgt aus:
Ein Shell Script, welches eigentlich den Wert einer Variable aus der Konsole liest, soll nun nur mit Python dahingehend verändert werden, dass ein Python Programm den Wert der Variable dem Script zuweisen kann. Man müsste dazu das shell script öffnen und beschreiben also
s='variable'
f = file("~/script", "w")
f.write(s)

Aber ich möchte ja nur eine ganz bestimmte Zeile ändern. Kann man irgendwie einen Parameter übergeben welcher die Zeile angibt, sodass nur eine bestimmte Zeile beschreiben wird.

Ich habe mir überlegt das man mit Python den Wert der Variable in eine temporäre Textdatei schreiben könnte. Dann könnte man die Zeile "read variable" in "variable=` cat ~/tmp/Datei |head -1`" ändern.



Hat jemand von euch eine einfachere Lösung?
vielen Dank :)
Ubuntuxer
Zuletzt geändert von Ubuntuxer am Freitag 18. April 2008, 17:55, insgesamt 1-mal geändert.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Variale in Python festlegen; in einem Shell-Script benut

Beitragvon Leonidas » Donnerstag 17. April 2008, 17:54

Hallo Ubuntuxer, willkommen im Forum,

Ubuntuxer hat geschrieben:Hat jemand von euch eine einfachere Lösung?
vielen Dank :)

Ja - dem Skript beim Starten Umgebungsvariablen mitgeben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Beitragvon Ubuntuxer » Donnerstag 17. April 2008, 18:18

danke für die schnelle Antwort
Wie gebe ich denn Umgebungsvariablen mit, wenn ich das mit os.system('./scrit') starte?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 17. April 2008, 19:17

Du solltest besser ``subprocess.Popen`` verwenden, dort gibt es einen Parameter ``env`` über den du die Umgebungsvariablen bearbeiten kannst.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Beitragvon Ubuntuxer » Donnerstag 17. April 2008, 20:12

Wenn ich
subprocess.Popen(['/home/johannes/Desktop/bash-script'], env = 'var')
eingebe bekomme ich nur Fehlermeldungen.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 17. April 2008, 20:20

``env`` müsste ja auch aller Logik nach ein Dictionary sein, denn deine Umgebungsvariablen haben ja nicht nur einen Namen sondern brauchen ja auch noch einen Wert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Beitragvon Ubuntuxer » Donnerstag 17. April 2008, 20:51

Ein Dictionary müsste dann doch so funktionieren:
env = {'var': 'a'}
var=Variablenname
a=Wert der Variablen var

Ich habs jetzt ausprobiert und es funktioniert wunderbar.
Vielen Dank :D
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

gksu in Verbindung mit subprocess

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

Ich hab jetzt ein neues Problem; ich kann das Script nicht als sudo starten
aus irgendeinem Grund funktioniert der folgende Befehl nicht:

Code: Alles auswählen

subprocess.Popen(['gksu ~/Script'], env = {'var': 'a'})

bei os.system hatte ich dieses Problem nicht.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Samstag 19. April 2008, 10:59

IMHO brauchst du dann shell=True... Damit ~ auch ersetzt wird. Kannst du aber auch direkt in Python ersetzten lassen...
Es ist auch besser statt ['gksu ~/Script'] es zu trennen: ['gksu', '~/Script']

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 19. April 2008, 11:10

Ich hätte auch eher ``os.path.expanduser()`` verwendet.
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, 12:07

Das bringt leider auch nichts:

Code: Alles auswählen

subprocess.Popen(['gksu ' + os.path.expanduser('~') + '/script'], env = {'var': 'a'})

oder

Code: Alles auswählen

subprocess.Popen('gksu' + '/home/johannes/script', env = {'var': 'a'})

bringt beides die Fehlermeldung
Traceback (most recent call last):
File "./subprocess", line 4, in <module>
subprocess.Popen(['gksu ' + os.path.expanduser('~') + '/script'], env = {'var': 'a'})
File "/usr/lib/python2.5/subprocess.py", line 594, in __init__
errread, errwrite)
File "/usr/lib/python2.5/subprocess.py", line 1147, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Samstag 19. April 2008, 12:12

Was kommt wohl aus 'gksu' + '/home/johannes/script' raus? Da fehlt ein Leerzeichen ;)
Wie wäre es hiermit:

Code: Alles auswählen

script_path = os.path.expanduser('~/script')
print script_path
subprocess.Popen(['gksu', script_path], env = {'var': 'a'})

Ist der Pfad auch richtig?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Ubuntuxer
User
Beiträge: 42
Registriert: Donnerstag 17. April 2008, 15:49

Beitragvon Ubuntuxer » Samstag 19. April 2008, 12:18

Ich Idiot, aber leider bekomme ich immer noch eine Fehlermeldung:
(gksu:12166): Gtk-WARNING **: cannot open display:

Hat einer von euch eine Idee, wo das Problem liegen könnte.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 19. April 2008, 14:46

Ubuntuxer hat geschrieben:Hat einer von euch eine Idee, wo das Problem liegen könnte.

Ja. 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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Samstag 19. April 2008, 14:48

Statt gksu könntest du sudo nehmen...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder