标签: tty

在 git bash 中使用 python json.tool 时出现“stdin is not a tty”错误

我在 Windows 上使用 Git Bash,尝试使用命令行漂亮地打印 JSON 输出。根据这个答案,我尝试以下操作:

$ echo '{"print": "this"}' | python -m json.tool
stdin is not a tty
Run Code Online (Sandbox Code Playgroud)

我的Python版本是2.7.15(Anaconda)。

当我使用本机 Windows cmd 尝试相同的操作时,它可以正常工作(但我想使用 Bash)。

windows tty python-2.7 git-bash

4
推荐指数
1
解决办法
6001
查看次数

Golang 获取命令 tty 输出

我使用 go 的 exec Run 命令来获取命令输出,当命令“Stdout”字段设置为os.Stdout且错误发送到os.Stderr.

\n\n

我想将输出和错误输出显示到控制台,但我也希望我的程序看到输出是什么。

\n\n

然后我创建了自己的 Writer 类型来完成此操作,将两者写入缓冲区并打印到终端。

\n\n

问题是\xe2\x80\x94,当某些应用程序检测到它没有写入 tty 时,会将其输出更改为人类难以读取的内容。因此,当我以后一种方式执行此操作时,我得到的输出会变得丑陋。(对计算机来说更干净,对人类来说更丑陋)

\n\n

我想知道 Go 中是否有某种方法可以让我运行的任何命令相信我是 tty,尽管不是 tty os.Stdout/os.Stderr。我知道可以使用scriptbash 命令来完成,但是根据 Darwin/Linux 使用不同的标志,所以我试图避免这种情况。

\n\n

提前致谢!

\n

exec go tty

4
推荐指数
1
解决办法
3778
查看次数

docker stdin 和 tty 标志如何在容器中工作?

我经常使用这些命令行选项,-i以及-t在使用我想要与之交互的容器时。

  -i, --stdin=false: Pass stdin to the container
  -t, --tty=false: Stdin is a TTY
Run Code Online (Sandbox Code Playgroud)

这些如何使容器具有交互性?

containers stdin tty docker

4
推荐指数
1
解决办法
1059
查看次数

与Python中子进程打开的`/dev/tty`进行交互

我有一个 python 脚本,用于subprocess.Popen启动目标程序:网络服务器。我想与目标进行交互,因此我将stdin,stdoutstderr分配给管道,现在我可以读取和写入这些管道。

现在,网络服务器链接 OpenSSL 库以进行 TLS 处理。作为 TLS 处理的一部分,它会打开证书并提示输入密码。一般来说,输入密码并按 Enter 键后,网络服务器就会开始提供服务。现在,正如您可能已经猜到的那样,我想从 python 脚本输入此密码。通常,我需要做的就是写入服务器的stdin. 然而,有一个问题。当 OpenSSL 提示输入并读取密码时,它不使用stdin/ stdout。它会打开/dev/tty并使用它。结果我必须输入密码并手动输入。

下图展示了这种情况。

程序设置

lsof下面,您可以看到服务器输出的片段:

memcached 25279 USER    0r  FIFO   0,13      0t0  7771739 pipe
memcached 25279 USER    1w  FIFO   0,13      0t0  7771740 pipe
memcached 25279 USER    2w  FIFO   0,13      0t0  7771740 pipe
memcached 25279 USER    3r   REG    8,1     3414  3414276 ....key.pem
memcached 25279 USER    4r   CHR    5,0      0t0       13 …
Run Code Online (Sandbox Code Playgroud)

python openssl subprocess tty

4
推荐指数
1
解决办法
1947
查看次数

箭头键通过标准输入

我正在尝试通过stdin将箭头键发送到bash:

猫| /斌/庆典

然后我输入"echo hi"=>"hi"出现在控制台上(当然没有引号)然后我按下箭头键=> ^ [[找不到命令]

是否可以通过stdin向程序发送箭头键?

我问的原因是:我想从另一个程序控制bash.我想将箭头键发送到bash

bash stdin tty pty

3
推荐指数
1
解决办法
1858
查看次数

频繁的isatty()调用对性能的影响

我正在编写一个在终端上生成彩色输出的linux程序.由于程序标准输出可以重定向到文本文件,或者通常重定向到非终端接收器,并且方法应该保持尽可能通用,我需要调用isatty(int fd)以确定是否应该发送ASCII颜色转义码.

由于我不确定在每次调用printf()之前调用isatty()对性能的影响,我已经实现了一个缓冲区,缓冲了前16个fds的isatty()结果:

#include <stdbool.h>
#include <stdio.h>
#include <unistd.h>

#define TERM_NORMAL     "\x1b\x5bm"
#define TERM_BRIGHT     "\x1b\x5b\x31m"
#define TERM_BOLD       "\x1b\x5b\x31m"
#define TERM_BLINK      "\x1b\x5b\x35m"
#define TERM_RED        "\x1b\x5b\x33\x31m"

//to prevent unnecessary isatty() calls, provide this lookup table
//for the first 16 fds
//0 means that it has not been checked yet
//1 means the fd is not a tty
//2 means the fd is a tty 
char isattybuf[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
Run Code Online (Sandbox Code Playgroud)

c unix linux glibc tty

3
推荐指数
1
解决办法
509
查看次数

无法在pty/N上更改终端大小(适用于ttyN)

我使用下一个更改终端大小:
rc = ioctl(fd, TIOCSWINSZ, &ws);
当我在linux文本终端下运行(通过Alt-Ctrl-F1切换)时,结果是我希望看到的.整个我的输入和输出在ioctl系统调用给出的范围内.
但是当我通过SSH连接到localhost并运行相同的程序时,它只能部分工作.我的意思是我不能输入比ioctl设置的终端大小更宽的命令,但是输出可以跨越ioctl给出的终端的边界,输入可以占用ioctl设置的更多行.此外没有自动回车和新线.
我直接运行程序时看到的唯一区别是它在终端/ dev/ttyN上运行,它的主要数字是5,当我通过SSH运行程序时,它使用/ dev/pts/N作为终端,主要编号为136所以,据我所知,这是由于终端的不同而发生的.
我的问题:
1.这是正确的吗?终端司机的原因是什么?
2.我该如何解决?我需要通过SSH在本地tty终端中使用相同的行为.

谢谢!

terminal ioctl tty pty

3
推荐指数
1
解决办法
1705
查看次数

tty在Linux内核中的作用

我正在浏览Linux版本0.0.1的源代码.在内核源目录中看到了一个文件tty_io.c.这个文件/ tty在Linux内核中的作用是什么?

c linux operating-system tty linux-kernel

3
推荐指数
1
解决办法
1901
查看次数

函数ttyn(3)返回什么?

手册页位于:http://man.cat-v.org/unix-6th/3/ttyn

这个例子:

if (ttyn(0) = 'x'){
...
}
Run Code Online (Sandbox Code Playgroud)

手册页说" 如果指示的文件与打字机不对应,则返回x. "

指示的文件将是参数0,所以标准输入,对吧?

什么是打字机?我的键盘?

你用这条线检查什么?

if (ttyn(0) = 'x')
Run Code Online (Sandbox Code Playgroud)

c tty

3
推荐指数
1
解决办法
122
查看次数

在Ubuntu中连接USB规模,cdc_acm说无法设置dtr / trs

我正在尝试在Linux(Ubuntu)中连接秤(Dibal系列400),但无法成功。安装了启用虚拟Com端口的驱动程序后,该秤可以在Windows上运行,但是当我在Linux上插入秤时,它会尝试启动,但是一段时间后,秤会关闭。

sys日志消息显示:

kernel: [ 3202.896355] usb 1-2: new full-speed USB device number 8 using xhci_hcd
kernel: [ 3203.038395] usb 1-2: New USB device found, idVendor=0483, idProduct=5740
kernel: [ 3203.038400] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
kernel: [ 3203.038403] usb 1-2: Product: Dibal G Series
kernel: [ 3203.038405] usb 1-2: Manufacturer: DIBAL S.A
kernel: [ 3203.038407] usb 1-2: SerialNumber: 00000000001A
kernel: [ 3203.039349] cdc_acm 1-2:1.0: ttyACM0: USB ACM device
mtp-probe: checking bus 1, device 8: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2"
mtp-probe: bus: …
Run Code Online (Sandbox Code Playgroud)

usb ubuntu serial-port cdc tty

3
推荐指数
1
解决办法
5973
查看次数