在 Python 中通过 ssh 运行 popen 时,终端窗口不会保持打开状态



我正在编写一个在Linux服务器上运行的Python程序。它监视某些日志文件,并根据给定的关键字在 GUI 中显示该日志文件中的行。

我添加了一个新功能,打开一个终端窗口,其中"less"显示用户在我的程序中双击的行。

我的问题是这样的:当我在本地(在我的计算机上)运行我的程序时,它可以完美运行。但是当我通过SSH连接到主服务器时从主服务器运行程序时,程序运行良好,但是当我双击其中一行时,我看到一个快速打开和关闭的控制台窗口。

以下是负责打开"更少终端"的代码:

p = subprocess.Popen(args = ["gnome-terminal", "--command = less -p " + """ +searchString + """ " -j 10 " + """ + path + """], stdout = subprocess.PIPE) 

如何保持打开状态?

附言如果我添加shell = TRUE,它只会打开一个新的终端窗口,没有less结果。

我的问题与 ssh 无关;我设法在本地计算机上重新创建它。在本地测试程序时,我使用短模式字符串进行测试,但是当我移动到服务器并开始使用实际字符串时,它们太大了!

发生的事情是:我给了less一个大于 99 个字符的模式。我得到了:"ungetcc 溢出",一个已知的错误,随后在 less 的 438 版本中得到了修复。

它对我有用

if sys.platform != "win32": sp.Popen(command.split(), shell=False)
else: sp.Popen(command.split(), shell=True)

最新更新