파이썬 스크립트를 실행 한 후 QGIS를 종료하는 방법은 무엇입니까?


10

파이썬 스크립트를 통해 실행 한 qgis --code myscript.py다음 즉시 종료하고 싶습니다 . iface.actionExit().trigger()파이썬 콘솔에서 QGIS를 실행할 때 QGIS를 죽이지 만 전달하는 스크립트에 넣을 때 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
당신은 왜 할 수 있습니까?
Nathan W

1
인쇄 작곡가를 사용하여 자동으로 PDF를 만들고 있습니다 ( --screenshot플래그가 잘리지 않습니다).
Conley Owens

잠재적 답변자에게 도움이 될 수 있으므로 코드를 질문에 포함시켜 주시겠습니까? 나는 내가 sys.exit()일한 스크립트에서 사용했을 때 이것을 묻습니다 .
Joseph

echo "sys.exit()" > code.py; qgis --code code.py어떤 QGIS 버전을 실행하고 있습니까? 스크립트를 어떻게 호출 했습니까?
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가 필요한 경우 PYTHONPATH를 QGIS ( / usr / share / qgis / python )에 .bashrc 에 포함시키고 bash 콘솔에서 python myscript 로 스크립트를 실행하는 것 입니다. py . 효과가있다.

Windows에서는 다음을 사용하여 QGIS의 Python 콘솔에서 PYTHONPATH를 얻을 수 있습니다.

import os
os.getcwd()

Windows 제어판을 사용하여 변경하십시오.


1
나는 그것을 시도했다 (원래 질문에 언급 된 바와 같이). 작동하지 않습니다. 실제로 --code옵션 또는 콘솔에서만 시도 했습니까 ? 어떤 QGIS 버전을 사용하고 있습니까?
Conley Owens

"편집 메모"를 참조하십시오.
xunilk

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.