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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.