如何从我的Python程序中创建自定义系统命令?

时间:2013-02-19 05:34:11

标签: python command-line argparse docopt

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

我通常会将我的模块设为一个包,所以我已经拥有setup.py,但这并没有授予我免费命令。

谢谢!


修改

@prospade给出了一个非常好的链接。我将分享我的结果。

假设我们有

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

如果您想在shell中访问scripts=['package/cli.py'],可以使用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()

您甚至可以通过说__init__.py将其置于['my-cli=package:main']之下,但同样需要一个名为main()的函数。但你可以随意命名。只是说。

2 个答案:

答案 0 :(得分:2)

确保您的程序顶部有shebang line

#!/usr/bin/python

使文件可执行:

chmod a+x my-program.py

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

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

答案 1 :(得分:0)

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

#! /usr/bin/python

查看here了解更多信息。