2013-01-04 379 views
3

我想確定在Python中,如果某個應用程序已經打開,以便我不打開它兩次。我做了一些研究,發現可以取得程序的進程名稱,但我唯一遇到的問題是我檢查的程序本身有一個非常通用的進程名稱(在這種情況下, 「pythonw.exe」或「cmd.exe」)。如何在python中判斷外部程序是否打開?

但它確實在Windows任務管理器的應用程序列表不同的名字,所以我的問題是,如果有什麼辦法可以用它來檢測程序是否開放與否。我的工作場所不允許我下載用於該腳本的其他程序或模塊,因此,答案需要使用os模塊或類似的東西,這些已經包含在Windows庫中。

回答

1

我認爲Python的標準模塊無法完成您的要求。它需要一些第三方庫,如win32api,win32pdhutil,win32con

另一種方法是使用Windows命令tasklist。使用Python作爲bat包裝器,並解析tasklist的輸出。

C:\Documents and Settings\Administrator>tasklist 

Image Name     PID Session Name  Session# Mem Usage 
========================= ====== ================ ======== ============ 
System Idle Process   0 Console     0   28 K 
System       4 Console     0  236 K 
smss.exe      812 Console     0  388 K 
csrss.exe     860 Console     0  3,720 K 
winlogon.exe     884 Console     0  4,148 K 
services.exe     928 Console     0  3,356 K 
lsass.exe     940 Console     0  5,904 K 
vmacthlp.exe    1100 Console     0  2,348 K 
... 
+0

+1 tasklist命令,Windows用戶數年中我從來不知道這一點。 – iKlsR

+0

這是一個非常有用的命令,但遺憾的是,PID並不足以拉取特定的程序。謝謝你的信息,但;更好地知道這是我不能做的事(沒有額外的庫),而不是跑來跑去試圖找到一個不存在的答案。 –

4

我使用下面的代碼來檢查,如果某個程序運行:

import psutil  #psutil - https://github.com/giampaolo/psutil 

# Get a list of all running processes 
list = psutil.pids() 

# Go though list and check each processes executeable name for 'putty.exe' 
for i in range(0, len(list)): 
    try: 
     p = psutil.Process(list[i]) 
     if p.cmdline()[0].find("putty.exe") != -1: 
      # PuTTY found. Kill it 
      p.kill() 
      break; 
    except: 
     pass 

PS:可以使用Virtual ENV或只是選擇其他的安裝路徑你自己的模塊安裝!

+0

謝謝,但代碼必須在沒有額外安裝程序的機器上運行,因此我無法使用其他模塊。 –

+0

如果你真的想刪除依賴關係,你不想使用py2exe或類似的程序? –

+0

psutil的更新鏈接:https://pypi.python.org/pypi/psutil/#downloads – TechDude

相關問題