2017-06-22 9 views
5

Ich schreibe einen Code in Python, in dem ich den Internetverkehr nach Software-Namen bekommen muss. Es wird von mir verlangt, den cmd-Befehl netstat -nb zu verwenden, Befehl, der eine Erhöhung erfordert. Ich muss es einfach halten, etwas aus einer Zeile oder so, keine langen Batch- oder Powershell-Skripte. Es ist vorzuziehen, wenn ich nur die Subprozess-Python-Bibliothek verwende.Powershell und Python - Wie führe ich einen Befehl als Admin

Ich habe zwei Zeilen Code bekam, die auf halbem Weg von Arbeit, was ich brauche:

subprocess.check_output('powershell Start-Process netstat -ArgumentList "-nb" -Verb "runAs"', stdout=subprocess.PIPE, shell=True) 

Das Problem in diesem ist, dass sich ein neues Fenster es geöffnet und alle Daten, die ich brauche verloren. Vielleicht gibt es eine Möglichkeit, ein anderes Fenster nicht zu öffnen oder die Ausgabe aus dem neuen Fenster zu speichern?

subprocess.check_output('powershell Invoke-Command {cmd.exe -ArgumentList "/c netstat -nb"}', stdout=subprocess.PIPE, shell=True) 

Dies ich die Ausgabe im selben Fenster habe, aber ich habe keine Höhen so ich gibt es keine Ergebnisse erhalten ... Vielleicht eine Art Erhebung des Erhaltens, ohne ein neues Fenster zu öffnen oder so ?

Vielen Dank für Ihre Hilfe, hoffe meine Frage war klar genug.

+0

Warum verwenden Sie Powershell, wenn Sie nur diese Befehle direkt aufrufen können? – TheIncorrigible1

+2

Warum sollte sich Python nicht selbst erhöhen, anstatt PowerShell für Sie zu tun? Weitere Informationen hierzu finden Sie unter [this] (https://stackoverflow.com/a/41930586/3245749). – TheMadTechnician

+0

Haben Sie sich den 'RUNAS' Befehl angesehen? – lit

Antwort

1

eine Batchdatei erstellen, die Aufgabe mit erfassten Ausgabe in eine temporäre Datei auszuführen:

[donetstat.bat] 
netstat -nb > ".\donetstat.tmp" 

Dann ausführen, dass in Ihrem Programm:

[yourprogram.py] 
subprocess.check_output('powershell Start-Process cmd -ArgumentList "/c ".\donetstat.tmp" -Verb "runAs"', stdout=subprocess.PIPE, shell=True) 

Es wahrscheinlich ein bisschen mehr sein würde, bullet-resistent, um die Umgebungsvariable TEMP zu erhalten und sie für einen vollständig qualifizierten temporären Speicherort zu verwenden:

netstat -nb > "%TEMP%.\donetstat.tmp" 

Und dann machen Sie das gleiche in Ihrem Python-Skript.

Sobald Sie die temporäre Datei erstellt haben, sollten Sie in der Lage sein, es in Python zu verarbeiten.

Wenn dies bei mehreren Worker-Prozessen dauerhaft sein muss, fügen Sie Code hinzu, um sicherzustellen, dass Sie für jeden Prozess eine eindeutige temporäre Datei haben.

Verwandte Themen