2 个不稳定版本
使用旧的Rust 2015
0.5.0 | 2020年2月17日 |
---|---|
0.4.5 |
|
0.4.4 |
|
0.4.3 | 2018年11月23日 |
#69 in #tty
25 每月下载量
用于 winpty
385KB
7K SLoC
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代码编译为
winpty.dll
和winpty-agent.exe
的二进制文件的MinGW g++工具链 - 一个针对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年1月23日),只有MinGW-w64编译器是可接受的。MinGW编译器(例如来自mingw-gcc-g++
包)不再维护,并且存在太多错误。
MSYS软件包
对于原始MSYS,使用mingw-get
工具(MinGW安装管理器),并至少选择以下组件
mingw-developer-toolkit
mingw32-base
mingw32-gcc-g++
msys-base
msys-system-builder
在运行./configure
时,请确保mingw32-g++
已添加到您的PATH
。它将在C:\MinGW\bin
目录中。
MSYS2软件包
对于MSYS2,使用pacman
并安装以下软件包
msys/gcc
mingw32/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
。将PREFIX=<path>
传递给make install
以覆盖此默认值。
使用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_DEBUG
环境变量设置为trace
以对winpty.exe
进程和/或使用libwinpty.dll
的进程进行跟踪。
winpty 还识别一个 WINPTY_SHOW_CONSOLE
环境变量。将其设置为 1 以防止 winpty 隐藏控制台窗口。
版权
本项目采用 MIT 许可证分发(请参阅项目根目录中的 LICENSE
文件)。
通过为此项目提交拉取请求,您同意将您的贡献许可给本项目,许可协议为 MIT 许可证。
依赖项
~0–2MB
~38K SLoC