2

我想使用 Python 启动gedit(默认 gnome 文本编辑器)并打开一个文件。我可以这样做,但是当从 Python 调用时,gedit总是会打开一个名为“Untitled Document 1”的额外选项卡,并带有某种旋转刷新图标。

在此处输入图像描述

我从

subprocess.call(["gedit", pathToFile])

但这阻止了主进程,所以我现在正在使用

Popen(["gedit", pathToFile])

这两个命令都会导致相同的不良行为。

如果我像这样从命令行调用 gedit,则不会发生这种情况

gedit pathToFile

问题的Python方面有什么我遗漏的吗?

更新:从接受的答案中,我想出了一个可行的解决方案:

Popen(["gedit", pathToFile], stdin=open(os.devnull, 'r'))
4

2 回答 2

4

我的猜测是它试图从标准输入或类似的输入中读取。

尝试添加stdin=open(os.devnull, 'r')Popen构造函数。

于 2012-09-23T06:51:17.707 回答
1

我无法复制 Popen 在我的 Ubuntu 12.04 系统上运行 Python 2.7.3 的任何问题。以下是部分抄本,行编号以供参考。在打印第 3 行或第 5 行之前,python 解释器显然被阻塞了;当我退出 gedit 时,打印了 0。所有的 gedit 调用都开始正常,并且没有一个带有 Popen 的调用阻止了解释器。有些文件在被 gedit 之前就已经存在,有些则没有。使用shell=Truewith subprocess.call (未显示的示例)没有任何区别,即它被阻塞了。

 1  >>> import subprocess
 2  >>> subprocess.call(['gedit','vv'], stdin=None, stdout=None, stderr=None, shell=False)
 3  0
 4  >>> subprocess.call(['gedit','vv'])
 5  0
 6  >>> pid = subprocess.Popen(['gedit','vv']).pid
 7  >>> pid
 8  3434
 9  >>> pid = subprocess.Popen(['gedit','uu']).pid
10  >>> pid
11  3442
12  >>> subprocess.Popen(['gedit','ww'])
13  <subprocess.Popen object at 0x1887c10>
14  >>> subprocess.Popen(['gedit','yy'])
15  <subprocess.Popen object at 0x1847c10>
于 2012-09-23T08:05:47.707 回答