Python中如何实现像Scrapy那样直接在命令行执行的程序?
直接在命令行敲 scrapy 就可以执行命令了,很好奇这种是怎么做到的,自己也想做个这样的程序。。。
Python中如何实现像Scrapy那样直接在命令行执行的程序?
要写一个像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里实现你的主逻辑,并用argparse或click库来处理命令行参数:
# 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.py的entry_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


