Seite 1 von 2
Variable in Python festlegen; in einem Shell-Script benutzen
Verfasst: Donnerstag 17. April 2008, 16:48
von Ubuntuxer
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
Re: Variale in Python festlegen; in einem Shell-Script benut
Verfasst: Donnerstag 17. April 2008, 17:54
von Leonidas
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.
Verfasst: Donnerstag 17. April 2008, 18:18
von Ubuntuxer
danke für die schnelle Antwort
Wie gebe ich denn Umgebungsvariablen mit, wenn ich das mit os.system('./scrit') starte?
Verfasst: Donnerstag 17. April 2008, 19:17
von Leonidas
Du solltest besser ``subprocess.Popen`` verwenden, dort gibt es einen Parameter ``env`` über den du die Umgebungsvariablen bearbeiten kannst.
Verfasst: Donnerstag 17. April 2008, 20:12
von Ubuntuxer
Wenn ich
subprocess.Popen(['/home/johannes/Desktop/bash-script'], env = 'var')
eingebe bekomme ich nur Fehlermeldungen.
Verfasst: Donnerstag 17. April 2008, 20:20
von Leonidas
``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.
Verfasst: Donnerstag 17. April 2008, 20:51
von Ubuntuxer
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

gksu in Verbindung mit subprocess
Verfasst: Samstag 19. April 2008, 10:45
von Ubuntuxer
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.
Verfasst: Samstag 19. April 2008, 10:59
von jens
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']
Verfasst: Samstag 19. April 2008, 11:10
von Leonidas
Ich hätte auch eher ``os.path.expanduser()`` verwendet.
Verfasst: Samstag 19. April 2008, 12:07
von Ubuntuxer
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
Verfasst: Samstag 19. April 2008, 12:12
von jens
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?
Verfasst: Samstag 19. April 2008, 12:18
von Ubuntuxer
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.
Verfasst: Samstag 19. April 2008, 14:46
von Leonidas
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.
Verfasst: Samstag 19. April 2008, 14:48
von jens
Statt gksu könntest du sudo nehmen...
Verfasst: Samstag 19. April 2008, 16:38
von Ubuntuxer
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.
Verfasst: Samstag 19. April 2008, 16:42
von Trundle
``'DISPLAY': os.environ['DISPLAY']`` noch in das env-dict von subprocess.Popen packen.
Verfasst: Samstag 19. April 2008, 17:23
von Ubuntuxer
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.
Verfasst: Samstag 19. April 2008, 21:23
von Leonidas
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.
Verfasst: Samstag 19. April 2008, 22:08
von Ubuntuxer
Tut mir leid, aber ich verstehe nicht was du mit Environment meinst.
