Задать вопрос
@motya88

Как решить проблему с запуском стороннего скрипта из exe файла собранного через pyinstaller?

Я пытаюсь сформировать exe файл через pyinstaller
Ниже упрощенный пример.
Основной файл который я конвертирую в exe это test.py его код ниже
from tkinter import messagebox
from tkinter import *
import subprocess

import os
import sys


pid_list = []
chk_chrome = []


def resource_path(relative_path):
    try:
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.dirname(__file__)
    return os.path.join(base_path, relative_path)





def on_close():
    if messagebox.askokcancel('Выход', 'Действительно хотите закрыть окно?'):

        root.destroy()




def retrieve():
    subprocess.Popen(['sys.executable', resource_path('test2.py'), id_entry.get()])




root = Tk()
root.title("TEST. Тест")

width = 350
heigh = 230
screenwidth = root.winfo_screenwidth()
screenheight = root.winfo_screenheight()
root.geometry('%dx%d+%d+%d' % (width, heigh, (screenwidth - width) / 2, (screenheight - heigh) / 2))

# можно ли изменять размер окна - нет
root.resizable(False, False)

id = StringVar()


id_label = Label(text="Введите ID:")

id_label.grid(row=0, column=0, sticky="w", padx=30, pady=15)



id_entry = Entry(validate='key', textvariable=id, width=20)


id_entry.grid(row=0, column=1, padx=30, pady=10)


start_button = Button(text="Поехали!", command=retrieve, width=10)
start_button.grid(row=5, column=1, padx=30, pady=10, sticky="e")




# вставка начальных данных
id_entry.insert(0, "306310073")

root.protocol('WM_DELETE_WINDOW', on_close)

root.mainloop()

Проблема возникает когда я пытаюсь по нажатию кнопки запустить другой скрипт через команду
subprocess.Popen(['sys.executable', resource_path('test2.py'), id_entry.get()])

Скрипт просто не запускается

сам файл test2.py
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.service import Service
import os
import sys
import time
import traceback


def resource_path(relative_path):
    try:
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.dirname(__file__)
    return os.path.join(base_path, relative_path)


option = webdriver.ChromeOptions()
option.add_argument("window-size=1280,800")
option.add_argument('--disable-blink-features=AutomationControlled')
option.add_experimental_option("excludeSwitches", ["enable-automation"])
option.add_experimental_option('useAutomationExtension', False)
s = Service(resource_path('./driver/chromedriver.exe'))

browser = webdriver.Chrome(service=s, options=option)
wait = WebDriverWait(browser, 60)

while True:
    try:
        browser.get('http://ya.ru/')
        time.sleep(4)
    except Exception as e:
        print('ОШИБКА: ' + str(e))
        traceback.print_exc()
        browser.quit()


файл test.spec
# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(['test.py'],
             pathex=[],
             binaries=[('./driver/chromedriver.exe', './driver')],
             datas=[('test2.py', '.')],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,  
          [],
          name='test',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )


Пожалуйста, помогите собрать exe в котором по нажатию на кнопку запустится скрипт с selenium

Тестировал на пк где не установлен python.
  • Вопрос задан
  • 222 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@Andy_U
А у вас sys.executable не зря в кавычках?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы