Seite 1 von 1

Prozesse unter Windows auflisten ohne Extramodul

Verfasst: Dienstag 8. Mai 2012, 19:17
von JR
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

Re: Prozesse unter Windows auflisten ohne Extramodul

Verfasst: Dienstag 8. Mai 2012, 21:28
von jbs
Kann ich so nicht nachvollziehen. Das funktioniert bei mir.

Zwei Anmerkungen: ``shell`` muss nicht aktiviert sein und man übergibt normalerweise eine Liste von Argumenten.

Re: Prozesse unter Windows auflisten ohne Extramodul

Verfasst: Dienstag 8. Mai 2012, 22:13
von JR
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?

Re: Prozesse unter Windows auflisten ohne Extramodul

Verfasst: Dienstag 8. Mai 2012, 22:33
von jbs
Und hier der obligatorische Hinweis auf PEP 8 (siehe Signatur).

Re: Prozesse unter Windows auflisten ohne Extramodul

Verfasst: Dienstag 8. Mai 2012, 22:33
von 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. :-)

Re: Prozesse unter Windows auflisten ohne Extramodul

Verfasst: Dienstag 8. Mai 2012, 23:10
von JR
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

Re: Prozesse unter Windows auflisten ohne Extramodul

Verfasst: Donnerstag 10. Mai 2012, 14:02
von JR
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