A Windows software package providing an interface similar to a Unix pty-master for communicating with Windows console programs.
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 9 年前 | ||
| 7 年前 | ||
| 10 年前 | ||
| 9 年前 | ||
| 7 年前 | ||
| 8 年前 | ||
| 8 年前 | ||
| 7 年前 | ||
| 9 年前 | ||
| 9 年前 |
winpty
winpty 是一款 Windows 软件包,它提供了一个类似于 Unix pty-master 的接口,用于与 Windows 控制台程序进行通信。该软件包包含一个库(libwinpty)以及一个供 Cygwin 和 MSYS 使用的工具,用于在 Cygwin/MSYS pty 中运行 Windows 控制台程序。
该软件的工作原理是:启动 winpty-agent.exe 进程,并为其创建一个新的隐藏控制台窗口,该窗口在控制台 API 和终端输入/输出转义码之间架起桥梁。它会轮询隐藏控制台的屏幕缓冲区以检测变化,并生成相应的输出流。
Unix 适配器允许在 mintty 或 Cygwin 的 sshd 下运行 Windows 控制台程序(例如 CMD、PowerShell、IronPython 等),并确保输入(如箭头键和功能键)和输出(如行缓冲)能够正常工作。该库对于编写非 Cygwin 的 SSH 服务器也可能很有用。
支持的 Windows 版本
winpty 可在 Windows XP 到 Windows 10(包括服务器版本)上运行。它可以编译为 32 位或 64 位二进制文件。
Cygwin/MSYS 适配器(winpty.exe)
前提条件
构建 winpty 需要以下工具:
- Cygwin 或 MSYS 安装环境
- GNU make
- 能够编译 C++11 代码的 MinGW g++ 工具链,用于构建
winpty.dll和winpty-agent.exe - 面向 Cygwin 或 MSYS 的 g++ 工具链,用于构建
winpty.exe
Winpty 需要两个 g++ 工具链,因为它分为两个部分。winpty.dll 和 winpty-agent.exe 二进制文件与原生 Windows 命令提示符窗口交互,因此它们使用原生 MinGW 工具链编译。winpty.exe 二进制文件与 MSYS/Cygwin 终端交互,因此它使用 MSYS/Cygwin 工具链编译。
MinGW 似乎分为两个发行版——MinGW(创建 32 位二进制文件)和 MinGW-w64(创建 32 位和 64 位二进制文件)。通常,这两个发行版中的任何一个都是可以接受的。
Cygwin 软件包
Cygwin 的默认 g++ 编译器面向 Cygwin 本身,但 Cygwin 也提供了 MinGW-w64 编译器的软件包。在撰写本文时,所需的软件包如下:
mingw64-i686-gcc-g++或mingw64-x86_64-gcc-g++。请为您的 CPU 架构选择合适的编译器。gcc-g++make
在撰写本文时(2016-01-23),只有 MinGW-w64 编译器是可接受的。MinGW 编译器(例如来自 mingw-gcc-g++ 软件包)已不再维护,且存在较多缺陷。
MSYS 软件包
对于原始 MSYS,请使用 mingw-get 工具(MinGW 安装管理器),并至少选择以下组件:
mingw-developer-toolkitmingw32-basemingw32-gcc-g++msys-basemsys-system-builder
运行 ./configure 时,请确保 mingw32-g++ 在您的 PATH 中。它通常位于 C:\MinGW\bin 目录下。
MSYS2 软件包
对于 MSYS2,请使用 pacman 并至少安装以下软件包:
msys/gccmingw32/mingw-w64-i686-gcc或mingw64/mingw-w64-x86_64-gcc。请为您的 CPU 架构选择合适的编译器。make
MSYS2 提供了三个用于启动 MSYS2 的开始菜单快捷方式:
- MinGW-w64 Win32 Shell
- MinGW-w64 Win64 Shell
- MSYS2 Shell
要构建 winpty,请使用与 MSYS2 架构匹配的 MinGW-w64 {Win32, Win64} 快捷方式。这些快捷方式会将 {mingw32, mingw64}/mingw-w64-{i686, x86_64}-gcc 软件包中的 g++ 编译器添加到 PATH 中。
或者,您也可以不安装 mingw32/mingw-w64-i686-gcc 或 mingw64/mingw-w64-x86_64-gcc,而是安装 mingw-w64-cross-gcc 和 mingw-w64-cross-crt-git 软件包。这些软件包会将交叉编译器安装到 /opt/bin 目录,这样三个快捷方式中的任何一个都可以使用。
构建 Unix 适配器
在项目目录中,运行 ./configure,然后运行 make,最后运行 make install。
默认情况下,winpty 会安装到 /usr/local。在执行 make install 时传递 PREFIX=<path> 可以覆盖此默认路径。
使用 Unix 适配器
要在 mintty 或 Cygwin sshd 中运行 Windows 控制台程序,请在命令行前加上 winpty:
$ winpty powershell Windows PowerShell Copyright (C) 2009 Microsoft Corporation. All rights reserved.
PS C:\rprichard\proj\winpty> 10 + 20
30
PS C:\rprichard\proj\winpty> exit
嵌入 winpty / MSVC 编译
有关 winpty.dll 导出函数的原型,请参见 src/include/winpty.h。
只有 winpty.exe 二进制文件使用 Cygwin;其他所有二进制文件都可在不依赖 Cygwin 的情况下运行,并且可以使用 MinGW 或 MSVC 进行编译。要使用 MSVC 编译,请下载 gyp 并在 src 子目录中运行 gyp -I configurations.gypi。这将生成 winpty.sln 及相关项目文件。有关处理 MSVC 版本和不同架构的说明,请参见 src/winpty.gyp 和 src/configurations.gypi 文件。
当前,使用 MSVC 编译 winpty 需要 MSVC 2013 或更高版本。
调试 winpty
winpty 附带了一个用于收集带时间戳的调试输出的工具。使用方法如下:
- 在运行 winpty 的同一台计算机上运行
winpty-debugserver.exe。 - 为
winpty.exe进程和/或使用libwinpty.dll的进程,将WINPTY_DEBUG环境变量设置为trace。
winpty 还识别 WINPTY_SHOW_CONSOLE 环境变量。将其设置为 1 可防止 winpty 隐藏控制台窗口。
版权
本项目根据 MIT 许可证分发(请参见项目根目录下的 LICENSE 文件)。
通过为本项目提交拉取请求,您同意将您的贡献根据 MIT 许可证授权给本项目。