subprocess.Popen 能不能模拟点击应用窗口右上角的叉号关闭应用程序?

查看 81|回复 3
作者:XIVN1987   
我的需求和实现代码如下:
''' 脚本修改 uvproj 和 uvopt 会导致文件格式变化,执行此函数打开工程再关闭,可恢复原本格式 '''
def open_close_uvproj(path):
    print(f'\n{path}')
    for file in os.listdir(path):
        if file.endswith('.uvproj') or file.endswith('.uvprojx'):
            proc = subprocess.Popen(fr'D:\Program\Keil\UV4\UV4.exe {os.path.join(path, file)}')
            time.sleep(10)
            proc.terminate()
现在能够打开指定的 Keil 工程,,也能在延时 10s 后自动关闭工程,,但工程文件没有恢复格式。。
猜测是因为只有通过点 Keil 右上角的叉号关闭,,Keil 才能写工程文件,,用 terminate() 和 kill() 杀死进程时,,Keil 不会保存工程文件
请问 Popen 有什么方法可以实现模拟点应用窗口右上角叉号关闭应用的方法吗??
我知道 Popen 有个 send_signal() 方法,,是不是通过该方法发送个特定信号就行了??请大神指点,,谢谢。。

keil, popen, path, file

NessajCN   
你应该直接问怎么修改 uvproj 和 uvopt 才能保证文件格式不变,而不是自己想个这么奇葩的方法来问怎么实现
建议直接把你修改文件的脚本贴上来
clemente   
获取进程号 subprocess.Popen 然后强制 kill
XIVN1987
OP
  
@NessajCN
uvproj 和 uvopt 文件都是 XML 格式的。。python 似乎没有库能够修改 xml 文件同时保持格式完全不变。。
比如下面这个提问,,十多年了也没有简单的解决方案。。
https://stackoverflow.com/questions/6539891/python-library-for-editing-xml-preserving-formatting-and-comments
您需要登录后才可以回帖 登录 | 立即注册

返回顶部