Python中如何实现像Scrapy那样直接在命令行执行的程序?

直接在命令行敲 scrapy 就可以执行命令了,很好奇这种是怎么做到的,自己也想做个这样的程序。。。


Python中如何实现像Scrapy那样直接在命令行执行的程序?
23 回复

要写一个像Scrapy那样能在命令行直接执行的Python程序,核心是两点:使用entry_points配置和创建命令行入口脚本

首先,你得有一个Python包。假设你的项目结构是这样的:

my_cli_tool/
├── my_cli_tool/
│   ├── __init__.py
│   └── cli.py
├── setup.py
└── README.md

关键在setup.py里,用entry_points来定义命令:

# setup.py
from setuptools import setup, find_packages

setup(
    name='my-cli-tool',
    version='0.1',
    packages=find_packages(),
    entry_points={
        'console_scripts': [
            'mycommand=my_cli_tool.cli:main',  # 这里定义命令
        ],
    },
)

这行配置的意思是:当用户在命令行输入mycommand时,系统会去执行my_cli_tool.cli模块里的main函数。

然后,在cli.py里实现你的主逻辑,并用argparseclick库来处理命令行参数:

# my_cli_tool/cli.py
import argparse

def main():
    parser = argparse.ArgumentParser(description='我的命令行工具')
    parser.add_argument('--input', help='输入文件')
    parser.add_argument('--verbose', action='store_true', help='详细模式')
    
    args = parser.parse_args()
    
    # 这里是你的主要业务逻辑
    print(f"处理输入: {args.input}")
    if args.verbose:
        print("详细模式已开启")

if __name__ == '__main__':
    main()

最后,在项目目录下用pip install -e .安装你的包。安装后,就可以在命令行直接运行mycommand了。

简单说就是:用setup.pyentry_points来注册命令,然后实现对应的函数。

windows 估计是 scrapy.exe Linux 估计是 Python 脚本 加个 shell 头

entrypoint

#2 没看懂到底是怎么做的,能再详细的解释一下吗?

他的意思是让你自己搜索,因为这是很明显搜索就可以得到答案的问题

setup.py 有设置,安装的时候给你装了一个指令

#7 搜索了,但是搜索的结果并不是我想要的

#7 我是没有搜到想要的内容才来问的

#7 我感觉他给的搜索内容就是一堆废话,我当然之后怎么在 Linux 里面设置 Python 可直接运行并且加入到环境变量中,但是这和我问的问题有关系吗?估计他根本也没看懂我在问什么就随便丢个链接了

setup(
entry_points={
‘console_scripts’: [
‘command = pkg.bin.cli:main’,
],
}
)

我知道的两个办法
1. 如果你开发的是一个 python 的包,希望通过 pip 安装,就是 12 楼的办法
2. 如果只是一个 python 文件,就是 1 楼想告诉你的办法,把 python 文件 chmod +x 之后放到 path 里面去

查看下安装包代码呗

你要找的是不是:REPL

你可能需要:docopt (Python3 命令行参数解析工具)

12 楼的办法,
scrapy.py 里面有一句 if name== ‘main’

#11 我个人认为我之前对你的问题的理解没有错误,审题后得出你想要把 py 文件加执行权限然后丢 path

如果你说的是 scrapy 的参数(原谅我并没有看出你想表达这个)后面有人给出了回应

本身就是 py 脚本程序啊…

你用编辑器查看一下{PY_HOME}/bin/{command}的源码就行了啊

cat which scrapy

回到顶部