2

geditPython を使用して、ファイルが既に開いている状態で (デフォルトの gnome テキスト エディター)を起動したいと考えています。私はそうすることができますが、Python から呼び出されると、gedit常に「無題のドキュメント 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

Ubuntu12.04システムでPython2.7.3を実行しているPopenで問題を再現できませんでした。以下は部分的なトランスクリプトであり、参照用に行に番号が付けられています。3行目または5行目を印刷する前に、Pythonインタープリターは明らかにブロックされていました。geditを終了すると、0が出力されます。すべてのgedit呼び出しは正常に開始され、Popenを使用した呼び出しはいずれもインタープリターをブロックしませんでした。一部のファイルは、geditされる前に存在していましたが、存在しなかったものもあります。shell=Truesubprocess.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 に答える