Seite 1 von 1

Windows Tasks ausgegeben.. ?

Verfasst: Donnerstag 5. November 2009, 14:36
von Bong-Jour
Hallöchen. Weiß jemand, wie ich mir unter Windows die aktuellen Tasks ausgeben lassen kann ? Ich möchte überprüen, ob ein Prgramm breits gestartet wurde oder nicht. Danke im Vorraus.

Verfasst: Donnerstag 5. November 2009, 16:50
von INFACT
Das tust du über prozesse, tasks sind die offenen fenster
http://mail.python.org/pipermail/python ... 01482.html

Verfasst: Donnerstag 5. November 2009, 17:44
von fhoech
Falls Du auf das pywin32- oder WMI-Modul verzichten willst, könnte auch folgender Code interessant sein, der mit Windows-Bordmitteln und der Python-Standardbibliothek funktionieren sollte:

Code: Alles auswählen

import subprocess as sp

def win_getprocessinfo(imagename=None):
	"""
	Return a list with information about running process(es).
	
	imagename   filter results by process name as string or None
	
	The returned list is empty if there are no matching processes,
	otherwise it contains dict(s) with the actual process information.
	
	"""
	processinfo = []
	args = ['tasklist', '/FO', 'csv', '/NH']
	if imagename:
		args.extend(['/FI', 'IMAGENAME eq ' + imagename])
	tasklist = sp.Popen(args, stdout=sp.PIPE)
	for line in tasklist.communicate()[0].splitlines():
		fields = line.strip('"').split('","')
		if not imagename or fields[0].lower() == imagename.lower():
			processinfo.append({'imagename': fields[0], 
								'pid': int(fields[1]),
								'session_name': fields[2],
								'session_no': int(fields[3]),
								'memory_kb': int(fields[4].replace(',', '').replace('.', '')[:-2])})
	return processinfo

if __name__ == '__main__':
	from pprint import pprint
	import os
	import sys
	
	if len(sys.argv) > 1:
		for argv in sys.argv[1:]:
			pprint(win_getprocessinfo(argv))
	else:
		pprint(win_getprocessinfo(os.path.basename(sys.executable)))
Ausgabe z.B.:

Code: Alles auswählen

>>> from pprint import pprint
>>> pprint(win_getprocessinfo('python.exe'))
[{'imagename': 'python.exe',
  'memory_kb': 7108,
  'pid': 4684,
  'session_name': 'Console',
  'session_no': 1}]

Verfasst: Freitag 6. November 2009, 22:57
von Bong-Jour
Das erste Beispiel ist super - Denn sogor ich kriege es ans laufen ;) Vielen dank dafür, Herr INFACT.

Das zweite hört sich sehr spannend an, allerdings bin ich zu doof dazu ^^ Ich hab mal folgendes Experiment versucht:

Code: Alles auswählen

Processname = "Pythonwin.exe"
Arguments = ['tasklist', '/FO', 'csv', '/NH'].extend(['/FI', 'IMAGENAME eq ' + Processname])
Processinfo = subprocess.Popen(Arguments, stdout=subprocess.PIPE)
Kann mir jemand sagen, was dor Funktionen .extend und .Popen machen ? Und wie selbst ich so ein einfaches Beispiel hinkriege ? ^^

Verfasst: Freitag 6. November 2009, 23:08
von Leonidas
Bong-Jour hat geschrieben:Kann mir jemand sagen, was dor Funktionen .extend und .Popen machen ?
Also ehrlich, die Dokumentation wirst du wohl noch selbst lesen können, oder?

Verfasst: Samstag 7. November 2009, 14:24
von Bong-Jour
@Leonidas: Ich glaube nicht, dass fhoech's Beispiel in der Documentation erklärt wird, also spar ich mir solchen Unsinn..


Weiß jemand, wie er auf

Code: Alles auswählen

subprocess.Popen(['tasklist', '/FO', 'csv', '/NH', '/FI', 'IMAGENAME eq Pythonwin.exe'], stdout=subprocess.PIPE)
kommt ? Wo hat er die Parameter her ? Und wieso funktioniert es so nicht.. ?

Verfasst: Samstag 7. November 2009, 14:27
von nemomuk
Weil du wahrscheinlich die tasklist.exe nicht hast. Wenn ich mich richtig erinnere, dann ist tasklist.exe nicht bei allen Windowsversionen enthalten - du kannst es dir aber auch manuell runterladen.

Verfasst: Samstag 7. November 2009, 14:39
von Leonidas
Bong-Jour hat geschrieben:@Leonidas: Ich glaube nicht, dass fhoech's Beispiel in der Documentation erklärt wird, also spar ich mir solchen Unsinn..
Nein, aber wie ``extend`` und ``Popen`` funktionieren. Und das hast du gefragt.

Du Parameter hat er wohl aus der Online-Hilfe von Tasklist.

Verfasst: Samstag 7. November 2009, 15:26
von Bong-Jour
Nein, aber wie ``extend`` und ``Popen`` funktionieren. Und das hast du gefragt.
Aber das steht doch in der Dokumentation.. ?! :lol: :wink: Ich streite das jetzt einfach hab und behaupte meine Frage bezog sich auf das obige Beispiel ^^


Ich dachte tasklist wär irgendein geheimer Konsolenbefehl, den nur Profis kennen und der bei help nicht aufgelistet wird ^^ Wenn ich dafür ein Programm installieren muss, bleib ich lieber bei dem ersten Besipiel. Danke alle für eure Hilfe =)

Verfasst: Samstag 7. November 2009, 18:20
von nemomuk
Das ist ein "Programm" direkt von Microsoft, das man aber ganz einfach mitliefern kann, da es nur eine .exe ist und wesentlich viel weniger Speicher und Aufwand benötigt als pywin32 (außer pywin32 ist sowieso schon installiert).

Verfasst: Samstag 7. November 2009, 20:05
von Leonidas
Ist die Frage ob man es laut Lizenzbedingugnen überhaupt mitliefern *darf*.

Verfasst: Mittwoch 9. Dezember 2009, 18:57
von Bong-Jour
Zusatz: Kann ich mir eigentlich auf diese Weise auch alle laufenden Programme anzeigen lassen ? Und eventuell ein paar Information über die Programme bekommen ? Zum Beispiel ob es grade auf der Taskleiste blinkt oder ähnliches.

Verfasst: Mittwoch 9. Dezember 2009, 23:45
von fhoech
Welche Windows-Version hast du denn? Ich dachte immer, tasklist.exe sei seit XP standardmässig dabei. Aber ich kann mich natürlich irren.

Verfasst: Donnerstag 10. Dezember 2009, 03:03
von Bong-Jour
Tasklist scheint er auch zu erkennen. Es erscheint dann die Meldung framedyn.dll konnte nicht gefunden werden