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

时间:2012-04-30 12:11:56

标签: python linux ssh subprocess gnome-terminal

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

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

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

以下是负责打开“Less Terminal”的代码:

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

如何保持开放?

P.S。如果我添加shell = TRUE,则只会打开一个没有less结果的新终端窗口。

2 个答案:

答案 0 :(得分:2)

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

发生了什么:我给less一个大于99个字符的图案。我得到了:“ungetcc溢出”,known bug,后来在less的第438版修复了。

答案 1 :(得分:0)

它适合我

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