2016-11-05 4 views
0

Ich muss "sudo Service Nginx Status", um den Dienststatus zu überprüfen. Ich habe folgendes:wie Sudo Befehl mit Python

import commands 
service output = commands.getoutput("sudo service nginx status") 

aber ich bin immer „keine tty vorhanden und kein askpass Programm angegeben“

Enthält diese jemand verstehen?

Antwort

1

mit commands.getoutput macht es unmöglich, die Benutzereingabe, die von Sudo Befehl erforderlich ist, zur Verfügung zu stellen. Der Name ist selbst erklärbar, Sie interessieren sich nur für die Befehlsausgabe. stdin ist geschlossen.

Es gibt mehrere Lösungen:

  1. die Kennwortüberprüfung für die sudo Benutzer deaktivieren, die diese Python-Skript startet. (Lesen Sie über Datei/etc/sudoers)

  2. Rohr Ihr Passwort ein: (unsicher/schlechte Lösung, aber leicht) "echo YOURPASS | sudo ..."

  3. Check-out subprocess.popen so dass Sie Eingabe, um entweder aus Konsole oder aus Datei https://docs.python.org/2/library/subprocess.html#popen-constructor