Python练习:调用其它程序
题目1
请百度搜索并安装文本编辑器notepad++。
并且写一个Python程序,实现:
-
用命令行启动 notepad++ 编辑器打开当前的代码文件。
-
过10秒后用Windows下的命令 tasklist 找到该notepad++进程,并获取其进程ID
-
根据 其进程ID 使用命令 taskkill 杀死notepad++进程。
如何使用这两个命令可以参考该文章 http://tweaks.com/windows/39559/kill-processes-from-command-prompt/
您需要高效学习,找工作? 点击咨询 报名实战班
点击查看学员就业情况
题目1-答案
# notepad++程序路径, 由于路径中有空格
# 所以需要双引号括起来,这是Windows shell的语法
notepadexepath = r'"d:\Program Files (x86)\Notepad++\notepad++.exe"'
# 当前代码文件的路径
scriptpath = r'E:\t1.py'
from subprocess import Popen,PIPE
import time,sys,os
# 调用notepad++ 打开 当前代码文件
cmd = f'{notepadexepath} {scriptpath}'
# 注意,不能用os.system 因为 我们的程序不能等notepad++退出
p = Popen(args=cmd, shell=True)
time.sleep(10)
# 返回的是 Popen 实例对象
p = Popen(
'tasklist',
stdin = None,
stdout = PIPE,
stderr = None,
shell=True)
# communicate 方法返回 输出信息
outinfo, errinfo = p.communicate()
# 注意返回的内容是bytes 不是 str ,
# 我的是中文windows,所以用gbk解码
outinfo = outinfo.decode('gbk')
# print (outinfo)
# 在输出中,寻找 notepad++ 的 进程ID
pid = None
proclist = outinfo.splitlines()
for pinfo in proclist:
if 'notepad++.exe ' in pinfo:
print(pinfo)
infolist = pinfo.split(' ')
# 去掉其中的空字符串元素
infolist = [info for info in infolist if info]
# 进程ID是第2个元素
pid = infolist[1]
print(f'notepad++的进程ID是{pid}')
break
if pid is None:
print('对不起,没有发现notepad++的进程ID')
sys.exit(2)
# 杀掉进程
os.system(f'taskkill /PID {pid} /F')