运行放在PATH(cygwin)中的Python脚本

时间:2019-05-09 06:38:28

标签: python-3.x cygwin shebang

我想将我的Python脚本放入PATH列出的目录中,并通过在Windows上cygwin中任何位置键入其名称来调用该脚本。

我正在使用shebang

#!/usr/bin/env python

在Linux计算机上完美运行。

尽管如此,通过从Windows cygwin调用以下行,我得到一个错误:

$ my_script.py some arguments
C:\app\Python36\python.exe: can't open file '/cygdrive/d/11_scripts/my_script.py': [Errno 2] No such file or directory

问题是由以下事实引起的:cygwin扩展了脚本路径,而python无法理解已安装驱动器的cygwin方式:/ cygwin / d / ... 当我使用完整路径(以win格式)或相对路径运行脚本时,它可以工作。

$ d:/11_scripts/my_script.py some arguments

您知道任何解决方法吗?这里讨论了类似的问题: Problems running Python script via Cygwin 但是我想使用PATH。

谢谢!

添加: 目前,我使用了一种放在PATH中的bash包装器脚本:

#!/usr/bin/bash
pypath='/cygdrive/c/app/Python36/python'

$pypath -u 'd:\11_scripts\my_script.py' $@

1 个答案:

答案 0 :(得分:0)

您正在跑步

C:\app\Python36\python.exe

是一些本地Windows Python,而 not 是Cygwin的Python,已编译为使用Cygwin。因此,自然不会对Cygwin路径一无所知。

如果要使用Cygwin中的Python,最好的选择是只使用Cygwin随附的Python。

如果您绝对必须使用Cygwin的本机Windows Python(您可以执行此操作,而我偶尔也有理由这样做,例如测试打算在使用Windows的Python for Windows上运行的代码)例如msvcrt模块)即可。但是您仍然需要将任何文件系统路径转换为本地Windows路径。在Cygwin中,您可以使用cygpath命令,例如

$ cygpath -w -a /cygdrive/d/whatever
D:\whatever

将传递给Python的所有文件路径都包裹起来

$ C:/Python36/python.exe "$(cygpath -w -a /cygdrive/d/whatever)"

如果您需要经常执行此操作,则可以制作包装脚本。