【问题标题】:Creating Python Executables for *nix [duplicate]为 *nix 创建 Python 可执行文件 [重复]
【发布时间】:2016-01-13 07:06:04
【问题描述】:

我用 python 编写了一个库,有点像脚本语言,我想把这个库变成一个终端可执行文件,可以这样调用:

myprogram /path/to/file

就像 python 运行 .py 一样,这将使用我的库中定义的函数运行文件。这有可能吗?

【问题讨论】:

  • 将#!/usr/bin/python 作为第一行。那么chmod +x myprogram.py
  • 这绝不会回答问题。我如何制作一个程序来运行具有定义功能的 .whatever 文件。类似于库,但来自命令行。
  • 啊哈!对不起,误解了这个问题。所以你需要一个调度员。你可以像我说的那样创建executable.py,然后以libfun1、lbfun2、...的形式链接到executable.py,你检查什么是zeroeth sys.argv,并基于sys.argv[0] 你调度到特定的功能
  • 所以基本上是一个读取文件的命令行应用程序,并且对于文件中的每个匹配函数,运行该特定函数?
  • @tristan 不,据我了解,他想要busybox 之类的东西

标签: python


【解决方案1】:

假设你这样写函数

#!/usr/bin/python

import sys

if (sys.argv[0] == "./funA.py"):
    print("Calling A")
    # ...
    sys.exit(0)

if (sys.argv[0] == "./funB.py"):
    print("Calling B")
    # ...
    sys.exit(0)

print(sys.argv[0])

你称它为main.py。然后你做这样的链接

$ `ln main.py funA.py`
$ `ln main.py funB.py`

实际上只有一个代码,三个名称,链接数等于 3。 但是如果你运行它

./funA.py

它将被发送到您代码中的funA 块。 但是如果你运行它

./funB.py

它将被发送到您代码中的funB 块。 等等等等

这是你要找的吗?

【讨论】:

  • 是的,这太完美了!!谢谢!
  • 很高兴听到。这就是小型系统的busybox 的工作原理。都是像ln、ls、cat 等所有小的unix 函数工具。一个可执行文件静态链接,但随后从它设置了大量链接,看起来像ln、ls、cat。几乎相同的调度程序逻辑是选择在里面运行什么函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 2013-05-20
相关资源
最近更新 更多