Gostaria de executar um script python via qgis --code myscript.py
e 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.
--screenshot
bandeira simplesmente não a corta).sys.exit()
nos meus scripts que funcionaram.echo "sys.exit()" > code.py; qgis --code code.py
Qual versão do QGIS você estava executando? Como você estava invocando os scripts?Respostas:
Tente no seu script:
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).
Corri myscript.py qgis --code no console do bash, dentro da pasta do script, e imediatamente eu tenho essa mensagem de erro:
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:
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:
e use o Painel de Controle do Windows para alterá-lo.
fonte
--code
opção ou apenas do console? Qual versão do QGIS você está executando?python myscript.py
, você está sugerindo que eu use a API fora do qgis, onde eu teria que lidar com toda a sobrecarga de executarQgsApplication.initQgis()
e carregar o projeto Eu mesmo? Nesse caso, isso está seguindo um caminho totalmente diferente.Funciona bem para mim fazer isso:
Também é útil que você possa definir um código de saída.
fonte