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
Variable in Python festlegen; in einem Shell-Script benutzen
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Hallo Ubuntuxer, willkommen im Forum,
Ja - dem Skript beim Starten Umgebungsvariablen mitgeben.Ubuntuxer hat geschrieben:Hat jemand von euch eine einfachere Lösung?
vielen Dank
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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 (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
``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 (former) Modvoice
Ich hab jetzt ein neues Problem; ich kann das Script nicht als sudo starten
aus irgendeinem Grund funktioniert der folgende Befehl nicht:
bei os.system hatte ich dieses Problem nicht.
aus irgendeinem Grund funktioniert der folgende Befehl nicht:
Code: Alles auswählen
subprocess.Popen(['gksu ~/Script'], env = {'var': 'a'})
Das bringt leider auch nichts:
oder
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
Code: Alles auswählen
subprocess.Popen(['gksu ' + os.path.expanduser('~') + '/script'], env = {'var': 'a'})
Code: Alles auswählen
subprocess.Popen('gksu' + '/home/johannes/script', env = {'var': 'a'})
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
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Was kommt wohl aus 'gksu' + '/home/johannes/script' raus? Da fehlt ein Leerzeichen
Wie wäre es hiermit:
Ist der Pfad auch richtig?
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'})
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.Ubuntuxer hat geschrieben:Hat einer von euch eine Idee, wo das Problem liegen könnte.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ich habe aber nur einen Bentzeraccount auf dem Rechner.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.
Aber ich müsste doch dann das Passwort im Terminal eingeben, aber ich will eigentlich weg von der KonsoleneingabeStatt gksu könntest du sudo nehmen...
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.
Ich habs mal eingefügt:
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.
Code: Alles auswählen
subprocess.Popen(['gksu', script_path], env = {'var': 'a', 'DISPLAY': os.environ['DISPLAY']})
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.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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 (former) Modvoice