Как запустить команду "Не сохранять" вместе с os.system('taskkill') в Python

Проект, над которым я работаю, создаст файл.CSV, чтобы пользователь мог просмотреть его при необходимости.

Если мой скрипт попытается открыть файл.CSV, когда у пользователя есть файл, открытый в Excel, мой скрипт запустится os.system("taskkill /im EXCEL.EXE"), Это закрывает программу Excel, так что мой сценарий может записывать в файл, поскольку регистрация важнее, чем открываемый файл.

Моя проблема и где мне нужна помощь заключается в следующем: если пользователь изменил НИЧЕГО в файле Excel, когда он открыт, когда taskkill Команда отправлена, Excel предлагает "Вы хотите сохранить?" Так что мой сценарий продолжает инициировать taskill Командуйте снова и снова, пока Excel или мой скрипт не вылетят.

ВОПРОСЫ:

1.Как я могу сообщить своему сценарию, когда появится это приглашение?

2.Как я могу сказать Excel "Нет, не сохранять", используя скрипт Python, если это приглашение появляется?

Это функция, о которой я говорю:

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")

2 ответа

Вы действительно не идете об этом правильно.

Во-первых, как taskkill документы объясняют, вы можете использовать /f флаг для принудительного завершения процесса. Это будет препятствовать тому, чтобы это выскакивало любое "Сохранить?" или "Ты уверен?" диалоги, или что-нибудь еще, и просто убить его.

Но на самом деле, вы не должны использовать taskkill (и особенно не через os.system вместо subprocess) вместо того, чтобы просто делать это в Python. Использование внешних инструментов имеет смысл в некоторых случаях, например, если вы мастер с taskkill но ничего не знаю о os модуль или сторонний psutil модуль. Но это явно не тот случай, иначе вы бы знали о /f или, по крайней мере, известно, как его искать.

Между тем, если вы хотите взаимодействовать с графическим интерфейсом Excel, вам необходимо использовать библиотеку автоматизации графического интерфейса (например, pyautogui).

Или, что еще лучше, используйте pywin32 автоматизировать Excel через COM. pywin32 поставляется с хорошей документацией, включая образцы для вождения Excel.

Я думаю, что я понял это. Добавляем /F в команду так: os.system("taskkill /F /im EXCEL.EXE"): кажется, закрывает приложение независимо от того, было ли оно изменено или нет.

Если кто-нибудь знает, что означает это /F, пожалуйста, дайте мне знать.

Другие вопросы по тегам