Prozesse unter Windows auflisten ohne Extramodul

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hallo liebe Pythonfreunde!

Es würde mich sehr freuen, wenn jemand helfen könnte!

Gebe ich im MS Dos Fenster folgendes ein

Code: Alles auswählen

wmic process get name
bekomme ich dort, was ich suche.

Ich bekomme es nicht hin, dies mit z.B. Popen aus einem Pythonskript heraus auszulesen.
Bei mir bleibt das Skript stehen, wenn ich folgendes versuche:

Code: Alles auswählen

from subprocess import Popen, PIPE
if __name__ == '__main__':
    proc = Popen( 'wmic process get name', shell = True, stdout = PIPE )
    for line in proc.stdout:
        print( line )
Vielen Dank und viele Grüße aus HH
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Kann ich so nicht nachvollziehen. Das funktioniert bei mir.

Zwei Anmerkungen: ``shell`` muss nicht aktiviert sein und man übergibt normalerweise eine Liste von Argumenten.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Merkwürdig, das nennt man dann wohl Vorführeffekt.

Vielen Dank für deine Mühe und auch den Hinweis!

Der Code nun:

Code: Alles auswählen

#! /usr/bin/env python
import os
from subprocess import Popen, PIPE
if __name__ == '__main__':
    if os.name == 'nt':
        proc = Popen( [ 'wmic', 'process', 'get', 'name' ], stdout = PIPE )
        for line in proc.stdout:
            print( line )
    elif os.name == 'posix':
        processes = Popen( ['ps', 'aux'], stdout = PIPE ).stdout.readlines()
        for process in processes[ 1: ]:
            process = str( process )
            # string process should get parsed before output...
            print( process )
Viele Grüße aus HH
JR


P.S.:
Wie markiere ich den Thread als gelöst?
Zuletzt geändert von Anonymous am Dienstag 8. Mai 2012, 22:22, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Und hier der obligatorische Hinweis auf PEP 8 (siehe Signatur).
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
BlackJack

@JR: Wenn es auch eine externe Abhängigkeit sein darf, schau Dir mal psutil an. Damit wird der Code einfacher und es werden mehr Plattformen unterstützt.

Code: Alles auswählen

from psutil import process_iter


def main():
    for process in process_iter():
        print process.name


if __name__ == '__main__':
    main()
P.S.: Gar nicht. :-)
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Oh, sorry, war lange nicht mehr hier und habe den Button "python" übersehen!

Danke für den Hinweis zur ext. Abhängigkeit.
Die versuche ich aber zu vermeiden.

U.a. weil ich auf beruflich auf Systemen arbeite, auf denen ich zwar dann
Python aber eben nicht unbedingt ein benötigtes Zusatzmodul habe bzw.
einrichten kann.

Vg
JR
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Es hängt unter MS Windows (also unten im Codebeispiel im os.name=='nt' Block) doch, und zwar in der Zeile

Code: Alles auswählen

for line in proc.stdout:
des nachfolgenden running example

Code: Alles auswählen

#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 08.05.2012
'''
import os
from subprocess import Popen, PIPE

if __name__ == '__main__':
    if os.name == 'nt':
        proc = Popen( [ 'wmic', 'process', 'get', 'name' ], stdout = PIPE )
        for line in proc.stdout:
            print( line )
    elif os.name == 'posix':
        processes = Popen( ['ps', 'aux'], stdout = PIPE ).stdout.readlines()
        for process in processes[ 1: ]:
            process = str( process )
            print( process )
Weiß jemand, was man da anders machen sollte?

Würde mich über Hilfe freuen!

Vielen Dank
JR
Antworten