我正在寻找相当于这个Python代码的Perl:
from sys import stdout
if stdout.isatty():
print "yes"
else:
print "no"
Run Code Online (Sandbox Code Playgroud) 有一个名为的设备文件/dev/console,其名称(major,minor)为(5,1).当我使用串行控制台启动时,它会像我一样连接到我的UART端口/dev/ttyS0.但是当我禁用串行控制台启动时,/dev/console似乎连接到其他地方,/dev/ttyS0总是连接到同一个物理设备,即UART0.是否有任何迹象(如/proc或某些内容/sys)显示此类信息?我在那里试过但却找不到我想要的东西.我开始追踪Linux内核源代码以澄清它们之间的关系.任何人都可以给我一些提示吗?何时,何地,如何以及如何确定/dev/console连接的物理设备?
编辑:最新的发现是:
/dev/console由配置console=内核参数,而这又是使用的getty打开stdin/stdout/stderr.如果未console=指定,/dev/null则打开为stdin/stdout/stderr.但我不确定它们是否完全相同/dev/console,这意味着/dev/console可以将其I/O连接到不同的物理设备./dev/console如果USB HID键盘已插入console=且未配置为UART ,则可以读取.因此/dev/console== /dev/null似乎没什么意义.需要更多调查.在我的嵌入式系统上,我通常使用/ dev/ttyS0作为主控制台.这是通过传递内核参数来实现的,console=/dev/ttyS0并且当init它参与时,getty会在inittab例如由中指定的同一设备上触发.ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100.
是否有可能在不重启的情况下更改这些设置并将控制台切换到另一个终端ttyS1,ttyUSBx甚至是一些伪tty?
在屏幕上,有没有办法完全禁用铃声?
我知道你可以切换到音频铃而不是视觉铃,并且已经完成了并且也没有在腻子中指定铃声所以我什么都听不到,但是当一个窗口中有铃声时,我看到一个恼人的弹出窗口其他窗口说"窗口1中的铃"等等.
关于如何摆脱它的任何想法?
我正在使用文件描述符和posix/unix read()函数从C++中的串口读取字节.在这个例子中,我从串口读取1个字节(为了清楚起见,省略了波特率设置和类似内容):
#include <termios.h>
#include <fcntl.h>
#include <unistd.h>
int main(void)
{
int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);
char buf[1];
int bytesRead = read(fd, buf, 1);
close(fd);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果连接到/ dev/ttyS0的设备未发送任何信息,程序将挂起.如何设置超时?
我试过像这样设置一个时间:
struct termios options;
tcgetattr(fd, &options);
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;
tcsetattr(fd, TCSANOW, &options);
Run Code Online (Sandbox Code Playgroud)
我认为它应该给1秒超时,但它没有任何区别.我想我误解了VMIN和VTIME.什么是VMIN和VTIME用于?
然后我搜索了网络,发现有人在谈论select()函数.这是解决方案,如果是这样,如何将其应用于上面的程序以使1秒超时?
任何帮助表示赞赏.提前致谢 :-)
当我在Emacs shell缓冲区(Mx shell)中运行交互式Python时,它会对TTY做两件令人惊讶的事情.首先,它打开输入echo,它在Python退出后仍然存在,直到我执行stty -echo.其次,它不接受Cd(或Cq Cd,即^ D)作为EOF:我必须键入quit()才能离开Python.我怎样才能阻止这两种行为呢?
我知道我可以运行python-shell,但我不想:我在shell中乱码,我想做五行Python然后用它来做Cd.所以"运行python-shell"不是我的问题的答案.
在终端窗口中运行的Python很好:^ D继续工作,回声不会改变.
Python 2.7.5,GNU Emacs 24.3.1,OS X 10.8.5
编辑从shell缓冲区添加此代码段:
bash-3.2$ echo foo
foo # no echo.
bash-3.2$ cat
foo # I typed this.
foo # cat returned it; no additional echo.
bash-3.2$ python
Python 2.7.5 (default, May 19 2013, 13:26:46)
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> # C-d has no effect. C-q C-d has no effect.
# not sure where …Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序,从stdin读取输入,操作输入,并将输出写入stdout.但是,许多程序检查stdin是终端还是管道(通过调用类似函数isatty),并以不同方式生成输出.我如何让我的程序假装成TTY?
该解决方案应适用于Linux和macOS.任何生成独立二进制文件的编程语言都是可以接受的,但Go是首选.
请注意,我问的是一个编程问题,而不是要求一个工具.所以,我喜欢script或unbuffer不喜欢的东西.
我写了一个PHP脚本.我希望它在使用连接到tty设备(终端)的标准输入调用之前显示帮助消息,然后以交互方式进行读取和执行,但是在使用文件或来自管道的流作为标准输入调用时不显示.
有没有办法从PHP中检测到这个?
当有人说"X服务器在/ dev/tty7上运行"时,我有几个问题.我对它是如何工作做了一些猜测,我希望有人可以告诉我以下陈述是真是假.
谢谢!
我试图附加到Kubernetes中的正在运行的容器,但是我收到下面的错误消息.
>kubectl attach -it es-client-2756725635-4rk43 -c es-node
Unable to use a TTY - container es-node did not allocate one
If you don't see a command prompt, try pressing enter.
Run Code Online (Sandbox Code Playgroud)
如何在容器yaml中启用TTY?