python-3.x - 运行放置在 PATH (cygwin) 中的 Python 脚本
问题描述
我想将我的 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 But I want to use the PATH.
谢谢!
补充:目前我使用一种放入 PATH 的 bash 包装脚本:
#!/usr/bin/bash
pypath='/cygdrive/c/app/Python36/python'
$pypath -u 'd:\11_scripts\my_script.py' $@
解决方案
你在跑步
C:\app\Python36\python.exe
这是一些本地 Windows Python,而不是来自 Cygwin 的 Python,编译为使用 Cygwin。所以很自然地,它对 Cygwin 路径一无所知。
如果你想使用 Cygwin 中的 Python,最好的选择是使用 Cygwin 附带的 Python。
如果您绝对必须使用来自 Cygwin 的本机 Windows Python(您可以这样做,而且我偶尔有理由这样做,例如测试旨在在使用 msvcrt 模块的 Windows 的 Python 上运行的代码),您可以这样做。但是您仍然需要将任何文件系统路径转换为本地 Windows 路径。在 Cygwin 中,您可以使用cygpath命令来执行此操作,例如
$ cygpath -w -a /cygdrive/d/whatever
D:\whatever
包装传递给 Python 的任何文件路径,例如
$ C:/Python36/python.exe "$(cygpath -w -a /cygdrive/d/whatever)"
如果您需要经常这样做,您可以制作一个包装脚本。
推荐阅读
- python - 如何将python的变量输出传递给psql?
- tomcat - 为什么我的tomcat控制台在启动后就死机了?
- raspberry-pi - Raspberry Pi Pico - Thonny 解释器的问题
- javascript - 隐藏的音频文件不播放
- python - 如何将向量的每个元素提升到另一个向量的每个元素的幂?
- php - 使用 php 仅在桌面设备上显示 div
- javascript - Postman - 循环遍历嵌套对象数组以创建变量
- sql - 将 2 个不同表中的值与包含进行比较
- reactjs - 如果发生错误,在 redux-saga 中的 api 调用后调度一个动作
- html - 如何使用 CSS 去除 html 表格中的白线