Pythonスクリプトの実行後にQGISを終了するにはどうすればよいですか?


10

経由qgis --code myscript.pyでpythonスクリプトを実行し、すぐに終了したいと思います。私はを使用iface.actionExit().trigger()しています。これは、Pythonコンソールから実行したときにQGISを強制終了しますが、渡したスクリプトに入れたときは強制終了しません--code

すぐに終了する正しい方法は何ですか?QGIS 2.0.1を実行しています

アップデート:私も試しましたsys.exit()。QGISはそれをキャッチし、次のウィンドウをポップアップします。

An error occured during execution of following code:
  execfile('myscript.py')

  Traceback (most recent call last):
    File "", line 1, in 
    File "myscript.py", line 14, in 
      sys.exit()
  SystemExit

更新os.kill(os.getpid(), 9)動作しますが、それは汚いハックであり、私はもっと良いものを探しています。


1
できますが、なぜですか?
ネイサンW

1
私は自動的に印刷コンポーザーでPDFを作成しています(--screenshotフラグはそれをカットしません)。
Conley Owens、

これは潜在的な回答者に役立つ可能性があるため、コードを質問に含めてください。sys.exit()うまくいった私のスクリプトでも使用したので、これを尋ねます。
ジョセフ

echo "sys.exit()" > code.py; qgis --code code.pyQGISのどのバージョンを実行していましたか?スクリプトをどのように呼び出しましたか?
Conley Owens

回答:


5

スクリプトで試してください:

from qgis.utils import iface

#your code here

iface.actionExit().trigger()

わたしにはできる。

ノートの編集:

Conley Owensのコメントに基づいて、スクリプトを少し変更して「何か便利なこと」を行いました(ifaceをインポートする行にコメントが付けられています)。

#from qgis.utils import iface
import os

os.system('clear')
print "Hello"

iface.actionExit().trigger()

スクリプトのフォルダー内のbashコンソールでqgis --code myscript.pyを実行したところ、すぐに次のエラーメッセージが表示されました。

ここに画像の説明を入力してください

また、qgis.utilsからiface行が必要であることを示します。

最初の行がコメント化されていない場合、スクリプトの実行にエラーはありませんでした:

ここに画像の説明を入力してください

しかし、コントロールはPythonコンソールにはありませんでした。それはbashコンソールにあります(そこで「Hello」の印刷を確認してください)。このため、コンソールを閉じてQGISを自動的に閉じるため、os.kill(os.getpid()、9)コマンドが機能します。

この問題の解決策、QGISの外部でPyQGIS APIが必要な場合、QGISへのPYTHONPATH(/ usr / share / qgis / python)を.bashrcに含め、スクリプトをpython myscriptとしてbashコンソールで実行することでした。 py。できます。

Windowsでは、QGISのPythonコンソールでPYTHONPATHを取得できます。

import os
os.getcwd()

Windowsのコントロールパネルを使用して変更します。


1
私はそれを試しました(元の質問で述べたように)。動作しません。--codeオプションから、またはコンソールからのみこれを実際に試しましたか?QGISのどのバージョンを実行していますか?
Conley Owens

私の「編集メモ」をご覧ください。
xunilk 2015

1
ヘルプをありがとうございますが、bashコンソールでとしてスクリプトを実行することの意味python myscript.pyがわかりません。qgisの外でapiを使用してQgsApplication.initQgis()、プロジェクトの実行とロードのすべてのオーバーヘッドを処理する必要があることを示唆していますか?私自身?もしそうなら、これは完全に異なるルートを進んでいます。
Conley Owens

1

これを行うことは私にとってうまくいきます:

import os
os._exit(0)

終了コードを設定できると便利です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.