Python 2.5和Tskill

时间:2011-08-24 03:39:56

标签: python

在使用Python 2.7时,我通过python脚本正常运行tskill操作,但当我切换到2.5时,此代码失败。

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上使用这个或类似方法成功关闭应用程序。谢谢你的帮助!

1 个答案:

答案 0 :(得分: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()