【问题标题】:How do I make a custom system command out of my Python program?如何从我的 Python 程序中创建自定义系统命令?
【发布时间】:2013-02-03 17:22:42
【问题描述】:

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

我通常把我的模块做成一个包,所以我已经有了setup.py,但这并没有给我一个免费的命令。

谢谢!


编辑

@pyrospade 在下面给出了一个很好的链接。我将分享我的结果。

假设我们有

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() 的函数。但是你可以随意命名它。只是说说而已。

【问题讨论】:

    标签: python command-line argparse docopt


    【解决方案1】:

    确保您的程序顶部有一个shebang line

    #!/usr/bin/python
    

    使文件可执行:

    chmod a+x my-program.py
    

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

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

    【讨论】:

    • 嗨。谢谢 好的,所以你让它可执行,现在你如何在你的系统中的任何地方运行它?
    • 更新了答案...只是符号链接到您的路径
    • 嗯,这听起来对我来说是正确的。 :/ 不记得了。非常感谢。
    • 那么我们是否总是在安装脚本中这样做?我们可以把它留给像 PIP 安装程序这样的东西吗?我不认为它具有做我希望它可以做的功能。
    • 您需要添加一个 bash 脚本来处理这个问题。看到这个问题 - stackoverflow.com/questions/874521/…
    【解决方案2】:

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

    #! /usr/bin/python
    

    查看here 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 2015-12-30
      • 2020-07-23
      相关资源
      最近更新 更多