#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() явно быстрее