2011-08-24 60 views
0

當使用Python 2.7時,我的tskill操作可以通過python腳本正常工作,但當我切換到2.5時,此代碼失敗。Python 2.5和Tskill

import os 
import time 
import win32com.client 
os.startfile('cmd') 
shell = win32com.client.Dispatch("WScript.Shell") 
shell.AppActivate('Administrator:C:\Windows\System32\cmd.exe') 
time.sleep(2) 
shell.SendKeys('tskill java + {ENTER}') 
time.sleep(2) 
shell.Sendkeys('tskill javaw + {ENTER}') 
#shell.SendKeys('exit + {ENTER}') 

我用os.startfile運行打開和運行應用程序(這是一個圖形工具)的Python腳本。

注意:該腳本被調用時,應用程序已經運行,因此我不需要在這裏打開它。

有人可以告訴我如何在Python 2.5上使用這種或類似方法成功關閉應用程序。謝謝您的幫助!

回答

0

我的系統沒有tskill,但我認爲它與taskkill /F /FI "IMAGENAME eq java*"類似。總之,這裏的如何調用一個正常的控制檯在後臺(即一個隱藏的窗口),使用子模塊(在Python 2.5.2進行測試,但使用taskkill代替)應用:

import subprocess 

def tskill(*args): 
    si = subprocess.STARTUPINFO() 
    si.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
    command = ('tskill',) + args 
    rc = subprocess.call(command, startupinfo=si) 
    return rc == 0 

if tskill('java') and tskill('javaw'): 
    #success 

我用call因爲它只不管呼叫成功還是失敗都很重要,但通常情況下,您可以使用subprocess.PIPE來使用subprocess.Popen來捕獲stdout和stderr。

編輯:如何殺死一個進程與子模塊

command = ['path/to/executable', 'arg0', 'arg1', '...'] 
p = subprocess.Popen(command) 
#do something 

#kill if it's still alive 
if p.poll() is None: 
    p.kill() 
+0

如何運行這個作爲一個獨立的腳本雖然起步?只需將該方法保存在一個文件中並將其稱爲'tskill('java')'? – dawnoflife

+0

我有一個主要的python腳本,可以打開並運行應用程序,它被稱爲處理。我現在需要關閉那個應用程序,我想用一個單獨的python腳本來做到這一點。如果我嘗試通過該腳本來'tskill',它不起作用,而如果我直接進入cmd它確實起作用。這是Python 2.5中的一件事,我可以用2.7來做到這一點。所以我的問題是如何通過Python腳本使用此代碼?對不起,如果這太久了! – dawnoflife

+0

我開始使用'os.startfile'處理 – dawnoflife