Como sair do QGIS depois de executar um script python?

10

Gostaria de executar um script python via qgis --code myscript.pye sair imediatamente. Estou usando iface.actionExit().trigger(), que mata o QGIS quando o executo no console python, mas não quando colocado no script para o qual passo --code.

Qual é o caminho certo para sair imediatamente? Estou executando o QGIS 2.0.1

Atualização : Eu também tentei sys.exit(). O QGIS o pega e abre uma janela com o seguinte:

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

Atualização : os.kill(os.getpid(), 9)funciona, mas é um truque sujo e estou procurando algo melhor.

Conley Owens
fonte
1
Você pode mas por quê?
23715 Nathan W
1
Estou automaticamente fazendo um pdf com um compositor de impressão (a --screenshotbandeira simplesmente não a corta).
Conley Owens
Você poderia incluir seu código na pergunta, por favor, pois isso poderia ajudar respondentes em potencial? Eu pergunto isso, como também usei sys.exit()nos meus scripts que funcionaram.
Joseph
echo "sys.exit()" > code.py; qgis --code code.pyQual versão do QGIS você estava executando? Como você estava invocando os scripts?
Conley Owens

Respostas:

5

Tente no seu script:

from qgis.utils import iface

#your code here

iface.actionExit().trigger()

Funciona para mim.

Nota de edição:

Baseado no comentário de Conley Owens, mudei levemente meu script para fazer "algo útil" (onde a linha que importa iface foi comentada).

#from qgis.utils import iface
import os

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

iface.actionExit().trigger()

Corri myscript.py qgis --code no console do bash, dentro da pasta do script, e imediatamente eu tenho essa mensagem de erro:

insira a descrição da imagem aqui

e indicando que from qgis.utils importa iface line é necessário.

Quando a primeira linha não é comentada, a execução do script não apresenta erros:

insira a descrição da imagem aqui

mas o controle não estava no console do Python; está no console do bash (observe a impressão "Olá"). Por esse motivo, seu comando os.kill (os.getpid (), 9) funciona porque fecha o console e fecha automaticamente o QGIS.

A solução para esse problema, se eu precisar da API PyQGIS fora do QGIS, ela deve incluir o PYTHONPATH no QGIS ( / usr / share / qgis / python ) no meu .bashrc e executar o script no console do bash como myspace python. py . Funciona.

No Windows, você pode obter o PYTHONPATH no console Python do QGIS com:

import os
os.getcwd()

e use o Painel de Controle do Windows para alterá-lo.

xunilk
fonte
1
Eu tentei (como observado na pergunta original). Isso não funciona. Você realmente tentou isso a partir da --codeopção ou apenas do console? Qual versão do QGIS você está executando?
Conley Owens
Por favor, veja minha "Nota de Edição".
Xunilk
1
Obrigado pela ajuda, mas não sei o que você quer dizer com executar o script no console do bash python myscript.py, você está sugerindo que eu use a API fora do qgis, onde eu teria que lidar com toda a sobrecarga de executar QgsApplication.initQgis()e carregar o projeto Eu mesmo? Nesse caso, isso está seguindo um caminho totalmente diferente.
Conley Owens
1

Funciona bem para mim fazer isso:

import os
os._exit(0)

Também é útil que você possa definir um código de saída.

Marioba
fonte