Не удается открыть Microsoft Teams со скриптом python (3.8) любым способом

Я пытаюсь создать скрипт для автоматизации входа в Microsoft Teams, и весь мой код работает, кроме той части, где нужно открыть приложение. Странно то, что он может открывать любое другое приложение, кроме MS Teams (Chrome, Notepad, Firefox, Edge и т. д.).

Вот соответствующий код:

def openfile():
    if os.stat("stor.txt").st_size == 0:
        name = filedialog.askopenfilename()
        newfile = open("stor.txt", "w")
        newfile.write(name)

    else:
        name = (open("stor.txt", "r").read())
        os.startfile(name)
        sleep(5)
        keyboard.write(open("user.txt", "r").read())
        keyboard.press("enter")
        sleep(3)
        keyboard.write(open("pass.txt", "r").read())
        keyboard.press("enter")

Я пробовал это с os.startfile, os.system(start..) и любым другим методом в Интернете. Не работает.

Значение, которое я передаю в os.startfile(), когда пытаюсь запустить Teams, равно C:/Users/Raghav/AppData/Local/Microsoft/Teams/Update.exe.


person Raghav Sinha    schedule 20.06.2020    source источник
comment
Примечание: хранить пароль в незашифрованном файле на жестком диске, вероятно, не лучший вариант. Разве Teams не оставляет вас автоматически после первого входа в систему?   -  person Chris    schedule 20.06.2020
comment
Какое значение имеет name при запуске os.startfile(name)?   -  person Chris    schedule 20.06.2020
comment
@Chris строковое значение - C:/Users/Raghav/AppData/Local/Microsoft/Teams/Update.exe   -  person Raghav Sinha    schedule 20.06.2020
comment
как я уже говорил, каким-то образом этот скрипт может открыть все, кроме команд   -  person Raghav Sinha    schedule 20.06.2020


Ответы (2)


import os

os.system("C:\\Users\\Lenovo\\AppData\\Local\\Discord\\Update.exe --processStart Discord.exe")

Для приложений, которые имеют адрес, как указано выше, также есть несколько советов:

  1. Иногда имя файла Discord.exe в адресе имеет Discord.exe (с двойными кавычками). Удалить.
  2. Вместо одинарного \ используйте в адресе двойное \\.

Это точно сработает ВПЕРЕД ✔

person Vijit Kumawat    schedule 20.04.2021

Прежде всего, я не рекомендую хранить ваш пароль в виде простого текста. Это не очень безопасно, и если другая программа перехватит фокус в нужное время, ваш код даже введет ваш пароль в другом месте!

Команды должны запоминать ваши учетные данные после первого входа в систему. Я предлагаю позволить ему справиться с этой частью.

В любом случае запуск os.startfile("foo.exe") аналогичен двойному щелчку на foo.exe. Имя файла, которое вы передаете, — C:/Users/Raghav/AppData/Local/Microsoft/Teams/Update.exe, а Update.exe не похоже на то, что должно запускать Teams для меня.

Изучая ярлык Teams в моем собственном меню «Пуск», я вижу, что все немного сложнее. Этот ярлык запускает Update.exe и передает ему некоторые аргументы:

C:\...\Update.exe --processStart "Teams.exe"

Невозможно передать аргументы программе с os.startfile(). Вместо этого попробуйте os.system():

os.system('C:/Users/Raghav/AppData/Local/Microsoft/Teams/Update.exe --processStart "Teams.exe"')

Существует множество других способов для запуска внешних команд в Python, но это, вероятно, самый простой способ, поскольку вам не нужны Teams. выходные потоки. Эта команда должна возвращать 0 в случае успеха и другое значение в случае неудачи.

person Chris    schedule 20.06.2020
comment
Есть ли способ решить проблему, которая возникает, если мое имя пользователя состоит из двух слов, то есть в операторе есть разрыв? например, если путь - C:/Users/Raghav Sinha/AppData - person Raghav Sinha; 20.06.2020
comment
Попробуйте заключить путь к исполняемому файлу в кавычки: os.system('"C:/Users/Raghav Sinha/AppData/Local/Microsoft/Teams/Update.exe" --processStart "Teams.exe"') - person Chris; 20.06.2020
comment
все еще получаю это: 'C:/Users/Raghav' is not recognized as an internal or external command, работающая программа или пакетный файл. - person Raghav Sinha; 20.06.2020
comment
хотя я не могу проверить это, я предполагаю, что это работает. позвольте мне попытаться найти способ обойти это. Большое спасибо. - person Raghav Sinha; 20.06.2020
comment
@RaghavSinha, вы используете именно ту команду, которую я написал в своем комментарии? С кавычками, начинающимися до C:/ и заканчивающимися после Update.exe? - person Chris; 20.06.2020
comment
да. может быть, он игнорирует любые повторяющиеся кавычки внутри существующих одинарных кавычек? - person Raghav Sinha; 20.06.2020
comment
У меня нет пробела в имени пользователя, но я могу успешно запускать команды с пробелами в пути, используя os.system(), например os.system(r'"C:\Program Files\PuTTY\putty.exe"'). Я использую необработанную строку только из-за обратной косой черты — если вы используете прямую косую черту, вам это не нужно. - person Chris; 20.06.2020