短文。
这两个月内遇到的问题,虽然Win 7已经退环境了也不指望修复,但是这俩问题都是我搜了半天也几乎完全搜不到任何信息的,觉得有必要稍微记录下。
Bug 1:输入和terminal宽度相等的字符数,会莫名换行
可以用以下脚本测试:
Python:
import shutil
columns, rows = shutil.get_terminal_size(fallback=(80, 24))
print('Columns:', columns)
print('-------------------')
print('a'*(columns)) # line breaks
print('-------------------')
print('a'*(columns-1)) # works fine
print('-------------------')
Node.js:
console.log('-------------------------------start-------------------------------');
var col = process.stdout.columns;
console.log("a".repeat(col))
console.log('--------------------------------end--------------------------------');
在CMD、PowerShell甚至VS Code里调用都会出现换行bug,无论column是多少:


这个Bug是在使用https://github.com/Last-Order/Erii这个框架时发现的。它调用了一个叫clui的库,里面有条fill()命令就是把整行用空白字符给填满(便于overwrite已有内容),结果就导致多出很多空行。
Bug 2: 用C#的Process启动cmd的bug
标题太长了写不下,这个behavior是这样的:
Process myProcess = new Process();
myProcess.StartInfo.FileName = @"cmd.exe";
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.RedirectStandardInput = true;
myProcess.StartInfo.RedirectStandardOutput = false;
myProcess.Start();
myProcess.StandardInput.WriteLine("echo test > 1.txt");
如果你用Process()来启动cmd.exe,并且重定向stdin,但是不重定向stdout,会出现以下奇怪现象:
- 在VS里debug时,会发现stdout也被重定向(弹出的cmd.exe里没文字),但是功能好像还基本都正常(比如上述的范例,会真的执行echo test到1.txt)。
- 如果编译好的程序直接双击运行,则cmd会显示一瞬间立刻crash。自然也不会执行任何你WriteLine进stdin的东西。
- 据说这个问题似乎只有WinForms程序会有,Console程序不会。(未测试)
这个问题其实我N年前还在用C#的时候就发现了,只不过今天碰巧又在别人写的程序里遇到(作者肯定是用Win 10的,所以没碰到)。介于这个bug在N年前Win 7还是主流的时候就有了,我寻思应该很多人问过才对;但是我找了好久,虽然找到一万个workaround,但是从来没人正式提到这个bug,直到看到这个贴(发表于2010年)。这里,作者很完整的描述了这个现象,但是很显然,依然没有人修复,仅有的几个回复也是牛头不对马嘴(顺便吐槽,这也算是网上问技术问题回答者的通病了)。







