我编写了一个python应用程序,它在gnu屏幕上运行一些命令而不加入屏幕并查看硬拷贝缓冲区。特别是,我正在运行:
screen -dmS test
screen -S test -p 0 -X stuff "ls$(printf \\r)"
screen -S test -X hardcopy screenOutput.txt
当我看到screenOutput.txt时,我什么都没看到。
但是,如果我加入屏幕,然后运行硬拷贝,
screen -dmS test
screen -S test -p 0 -X stuff "ls$(printf \\r)"
screen -r test
(quit the screen with c-A c-D)
screen -S test -X hardcopy screenOutput.txt
然后我在screenOutput.txt中看到输出。
有没有办法让硬拷贝写入文件而不加入屏幕?
答案 0 :(得分:1)
有关如何向会话发送命令的示例,请参阅linux - Send command to detached screen and get the output - Unix & Linux Stack Exchange。一个正确的调用是:
screen -dmS test
screen -S test -X hardcopy screenOutput.txt
即。 -X
应该是第一个命令选项。 -d
/ -r
切换到只搜索附加/分离的会话必须关注它(这方面的文件非常含糊不清);在这种情况下,根本不需要它们。
我在screen
v4.0.3
中确认此操作不起作用(生成空白文件)并在v4.2.0
中工作,并在同一环境中工作。
广泛调查:
调试显示根本原因位于WriteFile
fileio.c:472
:if (!fore) break;
,它退出函数而不写任何内容,因为fore
(指向前台窗口的指针)是确实是NULL
。
我无法确定修复此问题的具体提交,但确实在NULL
中检查了它是不是v4.2.0
。该变量在代码库周围的许多位置设置,并在大致相同数量的位置重置为NULL
,通常在分配后的代码中。因此,工作解决方案的可能性非常小。
我在此重申,在screen
v4.0.3
中,hardcopy
已被破坏,您必须升级(例如,将版本安装到/usr/local
,以便它覆盖库存一个)