标准输出不是 tty。对节点 + 磁带 + Tap-spec 使用 bash
Posted
技术标签:
【中文标题】标准输出不是 tty。对节点 + 磁带 + Tap-spec 使用 bash【英文标题】:stdout is not a tty. Using bash for node + tape + tap-spec 【发布时间】:2018-02-04 00:45:37 【问题描述】:正在查看磁带 + 点按视频并试图让它工作。 操作系统:Windows 7 Git Bash 外壳
node main.js | ./node_modules/.bin/tap-spec
stdout 不是 tty。
main.js:
var test = require('tape');
var add = require('./add');
test('add: two numbers add correctly', function(t)
var actual = add(1,2);
var expected = 3;
t.equal(actual, expected);
t.end();
);
添加.js:
module.exports = function(a, b)
return a + b;
;
winpty 节点 main.js | ./node_modules/.bin/tap-spec 不能解决问题。
【问题讨论】:
【参考方案1】:如果你在 Windows 中使用 GitBash
您必须在文件 ./bash_profile 中添加:
alias docker='winpty -Xallow-non-tty -Xplain docker'
【讨论】:
【参考方案2】:只是为了补充我的情况,我遇到了类似的问题。使用 winpty 的解决方案都没有帮助,因此我在运行脚本时使用了不同的提示来使用 node.exe
而不是 node
(在我的例子中来自 Git bash)。
不工作:
node myscript.js < some-input.txt > some-output.txt
工作:
node.exe myscript.js < some-input.txt > some-output.txt
【讨论】:
这适用于我在 Windows 10 上使用 git-bash 终端。 只需附加“.exe”就可以了!很有趣吧? 有人知道为什么node.exe
有效但node
无效?
@enorl76 花了一点时间才得到这个,但 Git bash 在其 <INSTALLDIR>/etc/profile.d/aliases.sh
中建立了一些别名。这包括在声明 alias node="winpty node.exe"
之前测试是否存在的节点。所以,node
隐含地通过 winpty 运行,而 node.exe
不是。
@ThomasUrban 似乎撤消节点别名有意义吗?抱歉,我是一个 Windows 新手,并且是 git bash 的新手,尽管我肯定看到 cmd 与 bash 相比我缺少多少【参考方案3】:
node generateData.js > db.json 在 Visual Studio Code 的终端上运行:bash
【讨论】:
【参考方案4】:我在控制台“stdout is not a tty”上遇到了同样的问题
这是因为控制台,在安装 Git 时有一个选择默认终端的选项。再次安装 Git 并选择终端作为 Windows 控制台,然后就可以了。
【讨论】:
对我不起作用,以另一个问题结束。对我有用的是使用嵌入在 Windows10 中的“Windows Powershell”。【参考方案5】:诊断:
代码没有问题,我得到以下输出:(OS : ArchLinux)
add: two numbers add correctly
✔ should be equal
total: 1
passing: 1
duration: 14ms
这可能是Windows 7 Git Bash Shell
的问题
我在某处读到:Git Bash 破坏了通过管道发送输出
要丢弃它,请运行以下命令:
node -p -e "Boolean(process.stdout.isTTY)"
要使其工作,您需要以下输出:true
解决方案(适用于 Windows):
$ node -p -e "Boolean(process.stdout.isTTY)"
false
使用winpty tool,它创建一个隐藏的控制台并在它和 Cygwin/GitBashshell 模拟 pty 之间编组 I/O:
$ winpty node -p -e "Boolean(process.stdout.isTTY)"
true
READ MORE : Node.js doesn't run as tty on windows / cygwin Issue#3006
【讨论】:
您是如何运行与我原来的帖子不同的 winpty 命令的?它对我来说失败了。您输入的确切命令是什么?谢谢 @FreddyNoNose,就像我在回答中所说的那样:winpty 命令将是编译后的winpty tool @FreddyNoNose :我不使用 Windows,但如果您按照答案操作,您将可以使用 Git Bash Shell 谢谢,但官方的立场似乎是不支持。参考:github.com/nodejs/node/issues/14100 修复它的解决方案是使用-Xallow-non-tty
参数为 winpty
。这是一个在 git-bash 上使用时错误为“not a tty”的示例。通过运行winpty -Xallow-non-tty python --help | less
修复了它以上是关于标准输出不是 tty。对节点 + 磁带 + Tap-spec 使用 bash的主要内容,如果未能解决你的问题,请参考以下文章