You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本转包后执行命令出现<star.cli.CLI object>冗余输出求助

问题解决:Python包console脚本末尾输出对象实例信息

问题根源

你在setup.py的console_scripts中直接将入口指向了CLI类。当Python执行console脚本时,会执行CLI()并自动打印该实例的字符串表示——这就是你看到<star.cli.CLI object at ...>的原因。而直接运行脚本或PyInstaller打包时,只是执行实例化操作但不会捕获并打印实例,因此没有这个问题。

解决方案

核心思路是让console脚本的入口指向一个无返回值的函数,而非直接指向类。以下是两种具体实现方式:

方式一:新增入口函数(最简修改)

修改src/star/__main__.py,新增main函数包裹类实例化:

from .cli import CLI

def main():
    # 仅实例化CLI,不返回实例
    CLI()

if __name__ == "__main__":
    main()

然后修改setup.py中的entry_points,将入口指向这个main函数:

entry_points={
    "console_scripts": [
        "star=star.__main__:main",
    ],
},

方式二:拆分类的初始化与执行(更规范的结构)

如果希望类的职责更清晰,可以将业务逻辑从__init__中拆分到独立的run方法:

  1. 修改src/star/cli.py的CLI类:
class CLI:
    def __init__(self) -> None:
        self.config = {}

        # 仅初始化参数解析和配置读取
        self.parser = argparse.ArgumentParser(description="Star - Command Line Tool")
        self.parser.add_argument("script", metavar="script", nargs="?", default=None, help="Name of the script to run")
        self.parser.add_argument("-v", "--version", action="store_true", help="Display the version of Star")
        self.parser.add_argument("-l", "--list", action="store_true", help="List all available scripts", default=False)

        self.args = self.parser.parse_args()
        self.read_config_file()

    def run(self):
        # 原__init__中的业务逻辑移到这里
        if self.args.version:
            self.display_version()
        elif self.args.list or self.args.script is None:
            self.display_script_list()
        else:
            self.run_script(self.args.script)

    # 其余方法(read_config_file、display_version等)保持不变
  1. 修改src/star/__main__.py:
from .cli import CLI

def main():
    cli = CLI()
    cli.run()

if __name__ == "__main__":
    main()
  1. 同样修改setup.py的entry_points指向main函数,同方式一。

为什么修改__str__/__repr__没用?

即使你重写了这两个方法,Python依然会打印实例的字符串表示,只是内容改变而已。我们需要的是完全避免打印实例,因此让入口函数无返回值才是根本解决办法。

内容的提问来源于stack exchange,提问作者user22578280

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 17:22:47