Seite 1 von 1

os.system("sudo ..")

Verfasst: Sonntag 28. März 2004, 16:38
von MacEvil
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 ?

Verfasst: Sonntag 28. März 2004, 17:38
von fs111
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

Verfasst: Sonntag 28. März 2004, 17:57
von MacEvil
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.

Verfasst: Sonntag 28. März 2004, 19:50
von hans
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

Verfasst: Sonntag 28. März 2004, 20:01
von MacEvil
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)

Verfasst: Sonntag 28. März 2004, 20:05
von hans
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

Verfasst: Sonntag 28. März 2004, 20:32
von MacEvil
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

Verfasst: Montag 29. März 2004, 08:27
von fs111
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

Verfasst: Montag 29. März 2004, 16:56
von Milan
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

Verfasst: Dienstag 30. März 2004, 12:13
von MacEvil
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:

Verfasst: Dienstag 30. März 2004, 17:38
von Milan
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

Verfasst: Dienstag 30. März 2004, 19:14
von MacEvil
ä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:

Verfasst: Dienstag 30. März 2004, 19:16
von Milan
Ah, ok... naja, es war ein Versuch wert...

Milan

Verfasst: Dienstag 30. März 2004, 19:38
von fs111
Wenn es gar nicht funktioniert, dann guck Doch einfach wie die das bei pexpect machen, und bau es nach.

fs111