首页 > 解决方案 > python 包中的命令行脚本:它们是在 Windows 机器上工作还是只在 Linux 上工作?

问题描述

如here所述,我正在Windows机器上试验命令行脚本。我创建了一个简单的python包,如下所示:

Folder PATH listing
Volume serial number is 986C-80E1
C:.
│   setup.py
│
├───bin
│       funniest-joke
│
└───funniest
        funniest.py
        __init__.py

为了重现性,我列出了下面每个文件的内容:

setup.py

import setuptools

setuptools.setup(
  name='test',
  scripts=['bin/funniest-joke'],
  packages=setuptools.find_packages()
)

bin/funniest-joke

这是命令行脚本:

import funniest
print(funniest.joke)

funniest/funniest.py

joke = "a funny joke"

funniest/__init__.py

from .funniest import joke

当我运行pip install -e .包安装成功。但是,通过在命令行中键入然后“Enter”直接运行脚本funniest-joke是行不通的。我得到 windows 菜单,询问我想如何打开文件:

在此处输入图像描述

python包中的命令行脚本严格来说是Linux的东西吗?我怎样才能让它在 Windows 上工作?

标签: pythonpowershellcommand-linepackagesetuptools

解决方案


这可能不是您想要的答案:Windows 通过将文件扩展名与执行方法相关联来工作。问题是:funniest-joke没有文件扩展名,所以 Windows 不知道它应该调用什么执行方法来执行文件。所以,它问你。(您想要做的:编写一个python直接调用的 PowerShell 或 CMD 包装脚本。)

Linux 查看文件的第一行(或第一个n字节,例如 512 到 4096 字节)以确定执行方法。脚本有一个shebang,“ #!”。本机机器可执行文件具有不同的签名。如果您真的想了解详细信息,请查看exec系统调用的源代码,或查看file命令的手册页。


推荐阅读