Skip to content

Commit 5e010b4

Browse files
committed
Optimize SubProcessTool Packaging
优化 `SubProcessTool` 工具类:添加进程启动超时功能、工作目录设置新增对 pathlib 风格的支持、其他微小调整; 优化 `Packaging` 类中参数拼接;
1 parent cc59a80 commit 5e010b4

3 files changed

Lines changed: 23 additions & 24 deletions

File tree

src/py2exe_gui/Core/packaging.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,13 @@ def _add_pyinstaller_args(self) -> None:
5151

5252
self._args = [] # 避免重复添加
5353

54-
self._args.extend([self.args_dict[PyinstallerArgs.script_path]])
54+
self._args.append(self.args_dict[PyinstallerArgs.script_path])
5555
if self.args_dict[PyinstallerArgs.icon_path]:
5656
self._args.extend(["--icon", self.args_dict[PyinstallerArgs.icon_path]])
5757
if self.args_dict[PyinstallerArgs.FD]:
58-
if self.args_dict[PyinstallerArgs.FD] == "One Dir":
59-
self._args.extend(["--onedir"])
60-
elif self.args_dict[PyinstallerArgs.FD] == "One File":
61-
self._args.extend(["--onefile"])
58+
self._args.append(self.args_dict[PyinstallerArgs.FD])
6259
if self.args_dict[PyinstallerArgs.console]:
63-
if self.args_dict[PyinstallerArgs.console] == "console":
64-
self._args.extend(["--console"])
65-
elif self.args_dict[PyinstallerArgs.console] == "windowed":
66-
self._args.extend(["--windowed"])
60+
self._args.append(self.args_dict[PyinstallerArgs.console])
6761
if self.args_dict[PyinstallerArgs.out_name]:
6862
self._args.extend(["--name", self.args_dict[PyinstallerArgs.out_name]])
6963

@@ -84,4 +78,4 @@ def run_packaging_process(self) -> None:
8478

8579
self.subprocess.set_working_dir(self._subprocess_working_dir)
8680
self.subprocess.set_arguments(self._args)
87-
self.subprocess.start_process()
81+
self.subprocess.start_process(time_out=500)

src/py2exe_gui/Core/subprocess_tool.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# Licensed under the GPLv3 License: https://www.gnu.org/licenses/gpl-3.0.html
22
# For details: https://github.com/muziing/Py2exe-GUI/blob/main/README.md#license
33

4-
import os.path
4+
from pathlib import Path
55
from sys import getdefaultencoding
6-
from typing import Optional, Sequence
6+
from typing import Optional, Sequence, Union
77

88
from PySide6.QtCore import QIODeviceBase, QObject, QProcess, Signal
99

@@ -52,10 +52,13 @@ def start_process(
5252
self,
5353
*,
5454
mode: QIODeviceBase.OpenModeFlag = QIODeviceBase.OpenModeFlag.ReadWrite,
55-
) -> None:
55+
time_out: int = 1000,
56+
) -> bool:
5657
"""
5758
创建并启动子进程 \n
5859
:param mode: 设备打开的模式
60+
:param time_out: 启动进程超时时间(单位为毫秒)
61+
:return: 是否成功启动
5962
"""
6063

6164
if self._process is None: # 防止在子进程运行结束前重复启动
@@ -70,9 +73,10 @@ def start_process(
7073

7174
self._process.setWorkingDirectory(self._working_directory)
7275
self._process.start(self.program, self._arguments, mode)
73-
self._process.waitForStarted(1000) # 阻塞,直到启动了子进程或超时(单位为毫秒)
76+
return self._process.waitForStarted(time_out) # 阻塞,直到成功启动子进程或超时
77+
return False
7478

75-
def abort_process(self, timeout: int = 10000) -> bool:
79+
def abort_process(self, timeout: int = 5000) -> bool:
7680
"""
7781
终止子进程 \n
7882
:param timeout: 超时时间,单位为毫秒
@@ -96,15 +100,16 @@ def set_arguments(self, arguments: Sequence[str]) -> None:
96100

97101
self._arguments = arguments
98102

99-
def set_working_dir(self, work_dir: str) -> bool:
103+
def set_working_dir(self, work_dir: Union[str, Path]) -> bool:
100104
"""
101105
设置子进程工作目录 \n
102106
:param work_dir: 工作目录
103107
:return: 是否设置成功
104108
"""
105109

106-
if os.path.isdir(work_dir):
107-
self._working_directory = work_dir
110+
working_dir = Path(work_dir)
111+
if working_dir.is_dir():
112+
self._working_directory = str(working_dir.resolve())
108113
return True
109114
else:
110115
return False

src/py2exe_gui/Widgets/center_widget.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,10 @@ def one_fd_selected(btn_id: int) -> None:
146146
"""
147147

148148
if btn_id == 0:
149-
self.option_selected.emit((PyinstallerArgs.FD, "One Dir"))
149+
self.option_selected.emit((PyinstallerArgs.FD, "--onedir"))
150150
self.parent_widget.statusBar().showMessage("将打包至单个目录中")
151151
elif btn_id == 1:
152-
self.option_selected.emit((PyinstallerArgs.FD, "One File"))
152+
self.option_selected.emit((PyinstallerArgs.FD, "--onefile"))
153153
self.parent_widget.statusBar().showMessage("将打包至单个文件中")
154154

155155
@QtCore.Slot(bool)
@@ -160,10 +160,10 @@ def console_selected(console: bool) -> None:
160160
"""
161161

162162
if console:
163-
self.option_selected.emit((PyinstallerArgs.console, "console"))
163+
self.option_selected.emit((PyinstallerArgs.console, "--console"))
164164
self.parent_widget.statusBar().showMessage("将为打包程序的 stdio 启用终端")
165165
else:
166-
self.option_selected.emit((PyinstallerArgs.console, "windowed"))
166+
self.option_selected.emit((PyinstallerArgs.console, "--windowed"))
167167
self.parent_widget.statusBar().showMessage("不会为打包程序的 stdio 启用终端")
168168

169169
@QtCore.Slot(str)
@@ -223,8 +223,8 @@ def handle_option_set(self, option: tuple[str, str]) -> None:
223223
self.project_name_le.setText(option_value)
224224
self.parent_widget.statusBar().showMessage(f"已将项目名设置为:{option_value}")
225225

226-
@QtCore.Slot(str)
227-
def handle_option_error(self, option: str) -> None:
226+
@QtCore.Slot(PyinstallerArgs)
227+
def handle_option_error(self, option: PyinstallerArgs) -> None:
228228
"""
229229
处理option_error信号的槽,重置设置失败的选项对应的界面,并向用户发出警告 \n
230230
:param option: 选项

0 commit comments

Comments
 (0)