Frage

Ich schreibe ein Python-Skript, das in Solaris 10. Die csh-Skript fordert den Benutzer für das Root-Passwort (das weiß ich), aber ich bin mir nicht sicher, wie man das Python-Skript, beantworten Sie die Eingabeaufforderung ein csh Skript führt mit das Passwort. Ist das möglich? Hier ist, was ich bin mit dem csh-Skript ausführen:

import commands

commands.getoutput('server stop')
War es hilfreich?

Lösung

Haben Sie einen Blick auf die pexpect Modul. Es ist so konzipiert, mit interaktiven Programmen beschäftigen, die Ihren Fall zu sein scheint.

Oh, und denken Sie daran, dass harte Codierung root-Passwort in einem Shell oder Python-Skript ist möglicherweise ein Sicherheitsloch: D

Andere Tipps

Verwenden Sie subprocess . Rufen Sie Popen () Ihren Prozess zu erstellen und verwenden, kommunizieren Sie (), Text zu senden. Leider vergessen die PIPE aufzunehmen ..

from subprocess import Popen, PIPE

proc = Popen(['server', 'stop'], stdin=PIPE)

proc.communicate('password')

Sie täte besser Sie das Passwort vermeiden und ein System wie sudo und sudoers versuchen. Pexpect, an anderer Stelle erwähnt, ist nicht Teil der Standardbibliothek.

import pexpect
child = pexpect.spawn('server stop')
child.expect_exact('Password:')

child.sendline('password')

print "Stopping the servers..."

index = child.expect_exact(['Server processes successfully stopped.', 'Server is not running...'], 60)
child.expect(pexpect.EOF)

hat den Trick! Pexpect Regeln!

In input= in proc.communicate() machen es laufen, für Jungs, die Standard-lib verwenden möchten.

from subprocess import Popen, PIPE
proc = Popen(['server', 'stop'], stdin=PIPE)
proc.communicate(input='password')

Sollte der Lage sein, sie als Parameter zu übergeben. so etwas wie:

commands.getoutput('server stop -p password')

Das scheint besser zu funktionieren:

import popen2

(stdout, stdin) = popen2.popen2('server stop')

stdin.write("password")

Aber es ist noch nicht 100%. Auch wenn „Passwort“ ist das richtige Passwort Ich bin immer noch so bekommen. Leider wieder aus dem csh-Skript, wenn es zu su zu root versucht,

Um zu vermeiden, das Passwort Frage im Python-Skript zu beantworten Ich werde einfach das Skript als root ausführen. Diese Frage ist noch unbeantwortet, aber ich denke, ich werde es nur tun, um diese Art und Weise für jetzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top