diff --git a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py index 421d55d..1382170 100644 --- a/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py +++ b/src/one_dragon_qt/widgets/setting_card/code_editor_setting_card.py @@ -15,6 +15,7 @@ BodyLabel, FluentIcon, FluentIconBase, + LineEdit, MessageBoxBase, PlainTextEdit, RoundMenu, @@ -479,8 +480,9 @@ class PythonCodeEditorDialog(BaseCodeEditorDialog): """Python 代码编辑器弹窗""" def __init__(self, parent=None, title: str = "Python 脚本编辑器", - initial_code: str = "", script_path: str = ""): + initial_code: str = "", script_path: str = "", script_arguments: str = ""): self._script_path = script_path + self._script_arguments = script_arguments super().__init__(parent=parent, title=title, placeholder="# 输入 Python 脚本", initial_code=initial_code) @@ -497,8 +499,23 @@ def __init__(self, parent=None, title: str = "Python 脚本编辑器", def _setup_editor_layout(self) -> None: self.highlighter = PythonHighlighter(self.editor.document()) + # 设置启动参数 + self._setup_arguments_layout() self.viewLayout.addWidget(self.editor) + def _setup_arguments_layout(self) -> None: + """设置启动参数的布局""" + args_layout = QHBoxLayout() + args_label = BodyLabel("启动参数: ") + self.args_input = LineEdit() + self.args_input.setPlaceholderText("请输入脚本启动参数") + self.args_input.setText(self._script_arguments) + args_layout.addWidget(args_label) + args_layout.addWidget(self.args_input) + + self.viewLayout.addLayout(args_layout) + self.viewLayout.addSpacing(8) + def _on_external_edit(self) -> None: if not self._script_path: return @@ -513,6 +530,10 @@ def _on_external_edit(self) -> None: def get_code(self) -> str: return self.editor.toPlainText() + def get_arguments(self) -> str: + """获取填写的 Python 脚本启动参数""" + return self.args_input.text() + class JsonHighlighter(QSyntaxHighlighter): """ JSON 语法高亮器 """ diff --git a/src/script_chainer/gui/page/script_setting_cards.py b/src/script_chainer/gui/page/script_setting_cards.py index 548b2bd..c1e1457 100644 --- a/src/script_chainer/gui/page/script_setting_cards.py +++ b/src/script_chainer/gui/page/script_setting_cards.py @@ -329,9 +329,13 @@ def on_edit_clicked(self) -> None: title='Python 脚本', initial_code=code, script_path=path, + script_arguments=self.config.script_arguments, ) if dialog.exec(): self.chain_config.save_python_script(self.config.idx, dialog.get_code()) + # 保存用户输入的脚本启动参数 + self.config.script_arguments = dialog.get_arguments() + self.value_changed.emit(self.config) self._update_display() def _update_display(self) -> None: diff --git a/src/script_chainer/win_exe/script_runner.py b/src/script_chainer/win_exe/script_runner.py index 94153ee..4a986ec 100644 --- a/src/script_chainer/win_exe/script_runner.py +++ b/src/script_chainer/win_exe/script_runner.py @@ -198,6 +198,14 @@ def _on_stdout(line: str) -> None: return _on_stdout +def _get_args_list(script_arguments: str | None) -> list[str] | None: + """获取解析后的脚本启动参数列表""" + args_list = None + if script_arguments and script_arguments.strip(): + args_list = shlex.split(script_arguments, posix=False) + return args_list + + def _launch_script( script_config: ScriptConfig, target_process_infos: list[ProcessInfo] | None = None, @@ -222,9 +230,7 @@ def _launch_script( script_path = script_config.script_path # 解析启动参数 - args_list = None - if script_config.script_arguments and script_config.script_arguments.strip(): - args_list = shlex.split(script_config.script_arguments, posix=False) + args_list = _get_args_list(script_config.script_arguments) pm = ProcessManager() try: @@ -637,6 +643,10 @@ def _run_python_script( script_dir = script_file_abs.parent try: sys.argv = [script_path] + # 解析并添加可能存在的启动参数 + args_list = _get_args_list(script_config.script_arguments) + if args_list: + sys.argv.extend(args_list) sys.path.insert(0, str(script_dir)) os.chdir(script_dir)