标准输出不是 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 在其 &lt;INSTALLDIR&gt;/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的主要内容,如果未能解决你的问题,请参考以下文章

将数据传输到需要 TTY(终端)的 Linux 程序

Composer 安装错误 - 输出不是 tty,输入不是 tty

编写伪装成 TTY 的程序

tar磁带归档

tty详解

TTY体系中设备节点的差别