Каков самый быстрый способ запуска установочных (exe / msi) файлов с использованием python?

#python #subprocess #exe #pywinauto #os.system

#питон #подпроцесс #exe #pywinauto #ос.система

Вопрос:

Формулировка проблемы:

Я хочу создать консольное приложение, которое выбирает некоторые установочные (exe / msi) файлы из текущего каталога скриптов и автоматически (с использованием тихих клавиш) устанавливает их. Конечно, я хочу сделать это как можно быстрее.

Пример:

Например, я хочу установить 3 разные программы: Telegram, 2GIS, 7z. Следовательно, у меня есть 3 установщика соответственно: tsetup.exe , 2GISShell.msi, 7z-x64.exe . Также у меня есть 3 скрипта, в которых я использую 3 разных способа их установки:

testos.py:

 import os
import time


#os.system

#2gis
print('start time 2gis')
start_time = time.time()
os.system('start '   '2GISShell.msi /qn')
print("--- %s seconds ---" % (time.time() - start_time))

#telegram
print('start time telegram')
start_time = time.time()
os.system('start '   'tsetup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-')
print("--- %s seconds ---" % (time.time() - start_time))

#7z
print('start time 7z')
start_time = time.time()
os.system('start '   '7z-x64.exe /S')
print("--- %s seconds ---" % (time.time() - start_time))
 

выходной сигнал:

 start time 2gis
--- 0.06574773788452148 seconds ---
start time telegram
--- 0.020944833755493164 seconds ---
start time 7z
--- 0.02792501449584961 seconds ---
 

testsub.py:

 import time
import subprocess

#subprocess

#telegram
print('start time telegram')
start_time = time.time()
subprocess.call('tsetup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-')
print("--- %s seconds ---" % (time.time() - start_time))

#7z
print('start time 7z')
start_time = time.time()
subprocess.call('7z-x64.exe /S')
print("--- %s seconds ---" % (time.time() - start_time))
 

выходной сигнал:

 start time telegram
--- 2.4023494720458984 seconds ---
start time 7z
--- 0.18584489822387695 seconds ---
 

testpywin.py:

 import time
from pywinauto.application import Application

#pywinauto

#telegram
print('start time telegram')
start_time = time.time()
Application(backend='uia').start('tsetup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-')
print("--- %s seconds ---" % (time.time() - start_time))

#7z
print('start time 7z')
start_time = time.time()
Application(backend='uia').start('7z-x64.exe /S')
print("--- %s seconds ---" % (time.time() - start_time))
 

выходной сигнал:

 start time telegram
--- 0.14841079711914062 seconds ---
start time 7z
--- 0.1946101188659668 seconds ---
 

Вопрос:

Существуют ли какие-либо лучшие (более быстрые) способы запуска установочных файлов?

Спасибо вам за ваше внимание. Я буду рад получить любую дополнительную информацию по этому вопросу.

Комментарии:

1. Сколько раз вы повторяли каждый хронометраж? Исполняемый файл программы установки не является чем-то особенным по сравнению с любой другой программой, поэтому метод, который вы используете для его запуска, может не иметь большого значения по сравнению со временем, которое требуется для запуска программы установки. Имейте в виду также, что одна и та же программа может работать быстрее при повторных запусках, например, если двоичный образ уже выгружен в память, или в случае установщиков, возможно, он уже извлек некоторые временные файлы и т.д.

2. Все это никак не повлияет на то, сколько времени займет установка. (Случай, который выглядел так, как будто он пошел быстрее, вероятно, не дождался завершения установки.)

3. @Iguananaut Я учел тот факт, что после однократной установки программы при последующих запусках программа может быть установлена быстрее. Поэтому перед каждым тестированием я устанавливал и деинсталлировал программы, чтобы все было на равных.

4. Я немного отредактировал сообщение и теперь более корректно использую os.system() . И с этого момента os.system() работает быстрее, чем другие методы. Вопрос остается открытым, существуют ли более эффективные методы или как использовать эти методы более правильно. Я буду особенно благодарен, если кто-нибудь объяснит, как каждый из методов работает внутри компании.

5. @user2357112supportsMonica Возможно, я как-то неправильно выразился, извините, но отчетливо видно, что запуск (возможно, не установка) установочных файлов с помощью os.system() явно быстрее