2016-07-13 28 views
2

Ich versuche, einen freigegebenen Laufwerksordner auf meinem System (Centos) zu mounten.Wie führe ich einen root-Befehl mit Pythons pexpect-Bibliothek aus?

Da der Befehl mount als root-Benutzer ausgeführt werden muss, melde ich mich zuerst als sudo-Benutzer mit dem Befehl su an. Nachdem die Anmeldung erfolgreich war, möchte ich meinen Mount-Befehl ausführen.

import pexpect 

cmd1 = "su" 
cmd2 = "mount -t cifs -o username=abc,password=def //101.101.101.214/Volume1 /home/Juna/Drive" 
pwd = "my_password" 
child = pexpect.spawn(cmd1) 
child.expect('Password:') 
child.sendline(pwd) 
child.expect('#') 
child.sendline(cmd2) 

Ich bekomme nicht die gewünschten Ergebnisse von meinem Skript. Können Sie mir bitte mitteilen, was in meinem Skript getan oder geändert werden muss, um das gewünschte Ergebnis zu erzielen?

+1

Es ist wirklich besser, den Benutzer zu geben, dies zu tun [ 'NOPASSWD' sudo Zugang] (http://unix.stackexchange.com/q/18830/45416), um das root-Passwort in das Python-Skript einzufügen. Es ist wahrscheinlich, dass es aus diesem Skript austritt (zB wenn Sie es zu Github schieben), und es macht den Aufruf komplexer. – poolie

+1

Sagen Sie nicht einfach "Ich bekomme nicht das gewünschte Ergebnis", sagen Sie, was los ist. – poolie

Antwort

0

Anstatt den Befehl interaktiv zu senden, verwenden Sie die -c option to su ihm den Befehl zu geben, mögen Sie ausführen:

child = pexpect.spawn(['su', 'root', '-c', cmd2])