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