【问题标题】:Python add command in terminalPython在终端中添加命令
【发布时间】:2021-06-04 00:30:31
【问题描述】:

我想在“windows”终端中添加命令。

假设我有这个代码

def add_command(command, call_function):
  #do something
def print_hello():
  print("hello function")
add_command("hello", print_hello)

这里是 Windows 终端

C:/> python main.py
C:/> hello
hello function
C:/>

这样

编辑:不是python控制台不是其他终端只有WINDOWS终端

【问题讨论】:

  • 你在寻找类似argparse的东西吗?
  • 请尽量不要以使现有答案无效的方式编辑问题。

标签: python terminal command


【解决方案1】:

您可以安装一个具有所需名称的批处理文件,并让它运行带有参数的 Python。

假设C:\users\you\bat在你的PATH中,你可以创建C:\users\you\bat\hello.cmd,内容类似于

@echo off
python C:\users\you\python\script.py

当您在 CMD 提示符下键入 hello 时,使其运行上述命令。 (如果您愿意,本身没有理由不让它直接从 hello.cmd 文件运行 python -c "... your entire script here ...",尽管 Windows 引用等在实践中使这相当讨厌。)

如果您的PATH 还没有包含您自己的批处理文件(或类似文件)的目录,则可能为此创建一个目录并将其添加到您的PATH 首先。答案假定您有一个用于批处理文件的目录(应该在您的 PATH 上)和另一个用于您的 Python 脚本的目录,但这只是一个模糊的 Unix-y 约定。

如果您希望 Python 为您创建文件,当然也可以这样做。

with open('C:/users/you/bat/hello.cmd', 'w') as scriptfile:
    scriptfile.write('\n'.join(command for command in
        ('@echo off', r'python C:\users\you\python\script.py', '')))

更一般地,您可以使用console_scripts 工具通过setup.py 安装系统范围的命令行脚本;但这可能是您只有在对创建可安装的 Python 模块有一定经验后才应该重新审视的内容。

【讨论】:

  • 那么如何在 Python 的 PATH 中添加 .cmd 文件?
  • 答案已经告诉你如何做到这一点。我更新了一些细节。
【解决方案2】:

实现 Python 功能的“添加命令”最可靠的方法是使用虚拟环境和标准 Python 打包技术。

如果您以足够规范的方式构建代码,那么对于基于pip 的安装,您可以定义所谓的console_scripts entry points。如果您使用 poetry,那么您可以在 pyproject.toml 文件的 [tool.poetry.scripts] 部分中定义入口点。

当您在 virtualenv 中安装代码时,入口点命令变得可用。

许多人没有意识到(至少在 Unix 和朋友下,对不起,我的 Windows 经验有限)代表每个入口点的文件指示 virtualenv 的 python 可执行文件作为处理器,因此它们可以从或链接复制到其他目录,仍然可以正常运行。

【讨论】:

    【解决方案3】:

    如果你想从终端运行函数:

    python -c "from main import print_hello; print_hello()"
    

    或者您可以简单地在文件末尾添加这些代码:

    if __name__ == "__main__":
        print_hello()
    

    然后运行:

    python main.py
    

    或者你可以根据你的输入调用函数:

    def print_hello():
        print("hello function")
    
    
    if __name__ == "__main__":
        cmd = input()
        if cmd == "hello":
            print_hello()
    

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 2017-11-23
      • 2016-12-25
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 2013-10-18
      • 2011-04-13
      相关资源
      最近更新 更多