有没有办法捕捉perl脚本中白蚁屏幕上的文本。我知道有一些函数,如system、exec、backticks,但问题是它们从script.For ex执行命令:-在终端中我编写cd/ (或) ls,然后运行perl脚本,它将读取白蚁屏幕上所写的内容(在本例中,cd将捕获cd/ (或)ls--无论给白蚁哪个)。我提供了一个解决方案,通过将您在termianl上编写的命令作为命令行参数传递给脚本,但还有其他方法吗?
发布于 2014-10-14 09:49:57
就像这样也许:
history | perl -ne 'print $_'发布于 2014-10-14 10:18:22
据我所知,在这样的情况下,您在终端中输入了一些内容:
[tai@littlerobot ~] echo "Hello"
Hello
[tai@littlerobot ~] perl myscript.pl您希望myscript.pl能够访问echo "Hello"部件,也可以访问该命令的输出的Hello。
Perl没有提供这样的特性。没有任何编程语言能够或能够提供这样的特性,因为您的脚本/程序运行的过程对运行前在同一个终端中发生了什么没有内在的了解。访问此文本的唯一方法是询问当前正在运行的终端,该终端将对此信息有一些记录(即回滚缓冲区),即使它无法区分文本中的哪些字符是由您键入的,哪些是输出的。但是,我知道没有任何终端可以通过任何类型的公共API来公开这些信息。
因此,如果希望myscript.pl能够访问该echo "Hello",则需要将其传递给您的脚本。将history传输到您的脚本(如Mark在他的答案中所示)是一种技术。history是一个内置的shell,所以它所拥有的知识与您的shell一样多(这与终端的知识并不完全相同)。特别是,它可以给出在这个shell会话中输入了哪些命令的列表。但是,它不能告诉您这些命令生成的输出。它也不能告诉您其他shell会话的情况,所以在Perl中这样做是非常无用的:
my @history = `tcsh -c history`;最后一件您可以尝试的事情(尽管这会非常复杂)是要求X服务器(如果在该操作系统上运行的话)提供屏幕快照,然后尝试定位当前终端正在运行的矩形并在其上执行OCR。然而,这将充满问题,例如处理重叠的窗口。
总之,你不能这么做。这与Perl无关。在任何编程语言中都不能这样做。
https://stackoverflow.com/questions/26355338
复制相似问题