os.system("sudo ..")

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
MacEvil
User
Beiträge: 52
Registriert: Mittwoch 21. Januar 2004, 21:40

Hallo,

ich will auf die Shell zugreifen -> os.system(command)
Nun brauch ich aber os.system("sudo chown -R...")

Wie kann ich da das passwort gleich mitliefern ?
Also im Stil von "sudo chown -R [..] -password dasPasswort"

Das Problem ist , wenn ich das ganzen per Hand nachvollziehe sieht es so aus :

Code: Alles auswählen

>>> import os
>>> os.system("sudo chown -R mysql data/")
Password: (hier wird das passwort eingetippt)
>>> 
Aber wie kann ich das automatisieren ?
Möge die Python-Community gedeihen
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Entweder nimmst Du pexpect: http://pexpect.sourceforge.net/ oder Du erlaubst den sudo Zugriff ohne Passwort, was sicherlich nicht das schönste ist.

HTH

Grüße fs111
MacEvil
User
Beiträge: 52
Registriert: Mittwoch 21. Januar 2004, 21:40

Hallo,

Das ich sudo brauch, das kann ich nicht ändern und etwas zusätzlich installieren auch nicht, Danke dir gleich.

Ich muss nur wissen wie ich das Passwort übergeben muss oder wie ich sonst das Passwort nachliefern kann.
Möge die Python-Community gedeihen
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Nicht so schnell aufgeben. Sollte doch eigentlich easy sein. Du hinterlegst dass Passwort in einer Datei (Schauder, ist auch nich gerade sicher). Nehemen wir an, deine Passwortdatei heißt ~/.geheim Dann würde das so aussehen:

Code: Alles auswählen

#dein script
>>> import os
>>> os.system("sudo chown -R mysql data/")
Password: (hier wird das passwort eingetippt)
>>>
#neues Script
>>> import os
>>> os.system("sudo chown -R mysql data/ < ~/.geheim")
>>>
Das ganze Verfahren nennt sich Eingabeumlenkung.

Das mag zwar funktionieren, aber wohl ist mir bei solchen Konstrukten nicht

Was hast du eigentlich vor? Wenn dein Script z. B. periodisch ablaufen soll, dann pack es in die crontab des entsprechenden Users. Dann brauchst du kein sudo

Hans
MacEvil
User
Beiträge: 52
Registriert: Mittwoch 21. Januar 2004, 21:40

Hm, das mit der Textdatei gefällt mir nicht so.
Das ganze ist eigentlich nur ein "shorcut" um meine perönlich MySQL Db zu starten (Das ganze sind ein paar os.cwd, os.system Zeilen)
Möge die Python-Community gedeihen
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Also tut mir leid, aber ich persönlich würde das Eintippen des Passwortes vorziehen. Ich gebe mein Passwort bestimmt 50 mal am Tag ein und sei es nur, um den Bildschirmschoner zu deaktivieren.

Hans
MacEvil
User
Beiträge: 52
Registriert: Mittwoch 21. Januar 2004, 21:40

Ja, aber dann kann ich den Rest ja auch von Hand Tippen.
Die Befehle sehen so aus :

Code: Alles auswählen

cd /usr/local/mysql
sudo chown -R mysql data/ # hier müsste das pw sein
sudo echo
sudo ./bin/mysqld_safe &
/usr/local/mysql/bin/mysql test
Möge die Python-Community gedeihen
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

MacEvil hat geschrieben:Hallo,

Das ich sudo brauch, das kann ich nicht ändern und etwas zusätzlich installieren auch nicht, Danke dir gleich.

Ich muss nur wissen wie ich das Passwort übergeben muss oder wie ich sonst das Passwort nachliefern kann.
pexpect must Du nicht wirklich installieren, das muss nur im gleichen Verezichnis wie Dein Skript liegen, und dass Du sudo brauchst ist mir klar, nur kann man sudo ja auch sagen, es braucht bei bestimmten Benutzern kein Passwort, damit sie Befehle asl root ausführen können.

fs111
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Ich habs noch nicht getestet, aber tut es nicht auch eine Pipe?

Code: Alles auswählen

import os
in=os.popen("sudo chown -R mysql data/","w")
in.write("mein_passwort")
in.close()
Milan
MacEvil
User
Beiträge: 52
Registriert: Mittwoch 21. Januar 2004, 21:40

Hm..

Code: Alles auswählen

>>> import os
>>> def test () :
...     os.chdir("/usr/local/mysql")
...     iin = os.popen("sudo chown -R mysql data/")
...     iin.write("pw")
...     iin.close()
... 
>>> test()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<stdin>", line 4, in test
IOError: (0, 'Error')
>>> Password:
Möge die Python-Community gedeihen
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Du musst schon genau das abschreiben, was da ich oben geschrieben habe. Standartmäßig werden Pipes für das lesen geöffnet, ich habe oben mittels "w" eine Pipe zum schreiben geöffnet, was du hier vergessen hast...

Milan
MacEvil
User
Beiträge: 52
Registriert: Mittwoch 21. Januar 2004, 21:40

äh Sorry, bin heute etwas verwirrt.
Aber dennoch :

Code: Alles auswählen

>>> import os
>>> def test () :
...     os.chdir("/usr/local/mysql")
...     iin = os.popen("sudo chown -R mysql data/","w")
...     iin.write("pw")
...     iin.close()
... 
>>> test()
Password:
Möge die Python-Community gedeihen
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Ah, ok... naja, es war ein Versuch wert...

Milan
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Wenn es gar nicht funktioniert, dann guck Doch einfach wie die das bei pexpect machen, und bau es nach.

fs111
Antworten