Windows-Alternative zu pexpect

Ich versuche, ein plattformübergreifendes Tool zu schreiben, das bestimmte Befehle ausführt. erwartet Bestimmte Ausgabe zur Überprüfung und bestimmte Ausgabe (z. B. Benutzername / Passwort) zur Authentifizierung.

nter Unix war ich erfolgreich bei der Programmierung eines Python-Tools, das daspexpect Bibliothek (überpip install pexpect). Dieser Code funktioniert perfekt und ist genau das, was ich versuche zu tun. Ich habe unten einen kleinen Auszug meines Codes für den Proof-of-Concept bereitgestellt:

self.process = pexpect.spawn('/usr/bin/ctf', env={'HOME':expanduser('~')}, timeout=5)
self.process.expect(self.PROMPT)
self.process.sendline('connect to %s' % server)
sw = self.process.expect(['ERROR', 'Username:', 'Connected to (.*) as (.*)'])
if sw == 0:
    pass
elif sw == 1:
    asked_for_pw = self.process.expect([pexpect.TIMEOUT, 'Password:'])
    if not asked_for_pw:
        self.process.sendline(user)
        self.process.expect('Password:')
    self.process.sendline(passwd)
    success = self.process.expect(['Password:', self.PROMPT])
    if not success:
        self.process.close()
        raise CTFError('Invalid password')
elif sw == 2:
    self.server = self.process.match.groups()[0]
    self.user = self.process.match.groups()[1].strip()
else:
    info('Could not match any strings, trying to get server and user')
    self.server = self.process.match.groups()[0]
    self.user = self.process.match.groups()[1].strip()
info('Connected to %s as %s' % (self.server, self.user))

Ich habe versucht, die gleiche Quelle unter Windows auszuführen (Ändern von/usr/bin/ctf zuc:/ctf.exe) und ich erhalte eine Fehlermeldung:

Traceback (most recent call last):
  File ".git/hooks/commit-msg", line 49, in <module> with pyctf.CTFClient() as c:
  File "C:\git-hooktest\.git\hooks\pyctf.py", line 49, in __init__
    self.process = pexpect.spawn('c:/ctf.exe', env={'HOME':expanduser('~')}, timeout=5)
  AttributeError: 'module' object has no attribute 'spawn'

Laut dempexpect Dokumentatio:

pexpect.spawn undpexpect.run() sind unter Windows nicht verfügbar, da sie auf Unix-Pseudoterminals (ptys) basieren. Plattformübergreifender Code darf diese nicht verwenden.

Das hat mich auf die Suche nach einem Windows-Äquivalent geführt. Ich habe das beliebte @ ausprobiewinpexpect projectHie und sogar eine neuere (gegabelte) VersionHie, aber keines dieser Projekte scheint zu funktionieren. Ich benutze die Methode:

self.process = winpexpect.winspawn('c:/ctf.exe', env={'HOME':expanduser('~')}, timeout=5)

nur zu sitzen und zu beobachten, wie die Eingabeaufforderung nichts tut (es scheint, als sei sie im @ gefangewinspawn Methode). Ich habe mich gefragt, was ich sonst noch tun könnte, um ein Python-Skript so zu programmieren, dass es mit der Befehlszeile interagiert, um den gleichen Effekt wie unter Unix zu erzielen. Wenn eine passende funktionierende Windows-Versionpexpect script existiert nicht, welche anderen Mittel könnte ich verwenden, um dies zu tun?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage