如何在 Python 中启动 'Do not Save' 命令和 os.system('taskkill')

How to initiate a 'Do not Save' command along with os.system('taskkill') in Python

我正在处理的项目将创建一个 .CSV 文件供用户在需要时查看。

如果我的脚本尝试打开 .CSV 文件,而用户已在 excel 中打开文件,我的脚本将启动 os.system("taskkill /im EXCEL.EXE")。 这将关闭 Excel 程序,以便我的脚本可以写入文件,因为日志记录比打开的文件更重要。

我的问题和需要帮助的地方是: 如果用户在 excel 文件打开时更改了任何内容,当发送 taskkill 命令时,excel 提示 "would you like to save?"。 所以我的脚本继续一遍又一遍地启动 taskill 命令,直到 Excel 或我的脚本崩溃。

问题:

1.How 当出现此提示时,我可以让我的脚本知道吗?

2.How 如果出现此提示,我可以使用 python 脚本告诉 Excel "No Do Not Save" 吗?

这是我指的函数:

def unlockDoor(x, y):
    userDictionary = shelve.open(UserDict)
    print('Welcome,',userDictionary[x])
    print('Door Unlocked')
    while True:
        try:
            with open(EntryLog, "a") as log:
                log.write("{0},{1},{2},{3}\n".format(time.strftime("%Y-%m-%d %H:%M:%S"), x, userDictionary[x],y))
                userDictionary.close()
                break
        except:
            os.system("taskkill /im EXCEL.EXE")

我相信我已经弄明白了。 像这样在命令中添加/F: os.system("taskkill /F /im EXCEL.EXE"): 似乎不管它是否被修改都会关闭应用程序。

如果有人知道这个 /F 是什么意思,请告诉我。

你真的不会这样做吧。

首先,正如the taskkill docs所解释的,您可以使用/f标志来强制终止进程。这将阻止它弹出任何 "Save?" 或 "Are you sure?" 对话框,或其他任何东西,然后将其杀死。

但实际上,您不应该使用 taskkill(尤其是不应该通过 os.system 而不是 subprocess),而应该只在 Python 中使用。在某些情况下使用外部工具是有意义的——例如,如果您是 taskkill 的向导但对 os 模块或第三方 psutil 模块一无所知。但这显然不是这里的情况,或者你会知道 /f,或者至少知道如何搜索它。

同时,如果您想与 Excel GUI 交互,则需要使用 GUI 自动化库(如 pyautogui)。

或者,更好的是,使用 pywin32 通过 COM 自动化 Excel。 pywin32 附带了很好的文档,包括驱动示例 Excel。