如何从Python程序中生成自定义系统命令



如果我有一个用Python编写的命令行程序(特别是使用docopt,我认为它使用argparse),并且我想将其作为my-program command1 args而不是python my-program.py command1 args运行,我该怎么办?目前,这是基于Debian的操作系统(例如Ubuntu)。

我通常会把我的模块作为一个包,所以我已经有了setup.py,但这并不能给我一个免费的命令。

谢谢!


编辑

@火山铲在下面给出了一个非常好的链接。我将分享我的结果。

假设我们有

top-level-directory
    setup.py
    package/
         __init__.py
         cli.py

如果要访问shell中的cli.py,则可以使用scripts=['package/cli.py']

如果你想以my-cli的身份运行,你可以使用

entry_points={
    'console_scripts':
        ['my-cli=package.cli:main']
}

由于我使用docopt,我有这个

def dispatcher(...)
def fun1(....)

def main():    
    arguments = docopt(COMMAND, version="xxxx")
    dispatcher(arguments)
if __name__ == '__main__':
    main()

您甚至可以通过说['my-cli=package:main']将其放在__init__.py下,但同样,您需要一个名为main()的函数。但你可以随心所欲地命名它。只是说说而已。

确保您的程序顶部有一行shebang:

#!/usr/bin/python

使文件可执行:

chmod a+x my-program.py

使用所需的命令名创建链接:

ln -s my-program.py /usr/local/bin/my-program

添加shebang(#!)并使其可执行。

#! /usr/bin/python

查看此处了解更多信息。

相关内容

  • 没有找到相关文章