2011-08-24 46 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