วิธีออกจาก QGIS หลังจากรันสคริปต์ python


10

ฉันต้องการเรียกใช้สคริปต์ python ผ่านqgis --code myscript.pyแล้วออกจากทันที ฉันใช้iface.actionExit().trigger()ซึ่งฆ่า 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.pyคุณใช้ QGIS รุ่นใด คุณเรียกใช้สคริปต์อย่างไร
Conley Owens

คำตอบ:


5

ลองในสคริปต์ของคุณ:

from qgis.utils import iface

#your code here

iface.actionExit().trigger()

มันใช้งานได้สำหรับฉัน

หมายเหตุการแก้ไข:

จาก Conley Owens'comment ฉันเปลี่ยนสคริปต์เล็กน้อยเพื่อทำ "สิ่งที่มีประโยชน์" (โดยที่บรรทัดที่อิมพอร์ตifaceถูกคอมเม้นต์ )

#from qgis.utils import iface
import os

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

iface.actionExit().trigger()

ฉันรันqgis --code myscript.pyที่ bash console, ภายในโฟลเดอร์ของสคริปต์, และทันทีที่ฉันได้รับข้อความแสดงข้อผิดพลาด:

ป้อนคำอธิบายรูปภาพที่นี่

และระบุว่าจาก qgis.utils นำเข้าสายifaceเป็นสิ่งที่จำเป็น

เมื่อบรรทัดแรกไม่ได้ถูกคอมเม้นต์การทำงานของสคริปต์จะไม่มีข้อผิดพลาด:

ป้อนคำอธิบายรูปภาพที่นี่

แต่ตัวควบคุมไม่ได้อยู่ในคอนโซล Python มันอยู่ใน bash console (สังเกตการพิมพ์ "Hello" ที่นั่น) ด้วยเหตุนี้คำสั่งos.kill (os.getpid (), 9) ของคุณจะทำงานเพราะปิดคอนโซลและปิด QGIS โดยอัตโนมัติ

วิธีการแก้ไขปัญหานี้ถ้าฉันต้องการ PyQGIS API นอก QGIS มันจะรวม PYTHONPATH ไปยัง QGIS ( / usr / share / qgis / python ) ใน. bashrcของฉันและเรียกใช้สคริปต์ใน bash console เป็นpython myscript PY มันได้ผล.

ใน Windows คุณสามารถรับ PYTHONPATH ใน Python Console ของ QGIS ด้วย:

import os
os.getcwd()

และใช้แผงควบคุมของ Windows เพื่อเปลี่ยน


1
ฉันลองแล้ว (ดังที่ระบุไว้ในคำถามเดิม) มันไม่ทำงาน คุณลองสิ่งนี้จาก--codeตัวเลือกหรือจากคอนโซลเท่านั้น? คุณใช้ QGIS รุ่นใดอยู่
Conley Owens

โปรดดู "การแก้ไขหมายเหตุ" ของฉัน
xunilk

1
ขอบคุณสำหรับความช่วยเหลือ แต่ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดยการเรียกใช้สคริปต์ในคอนโซลทุบตีเป็นpython myscript.pyคุณจะแนะนำให้ฉันใช้ API นอก qgis ที่ฉันจะต้องจัดการค่าใช้จ่ายทั้งหมดของการทำงานQgsApplication.initQgis()และการโหลดโครงการ ตัวเอง? ถ้าเป็นเช่นนั้นนี่จะเป็นเส้นทางที่แตกต่างอย่างสิ้นเชิง
Conley Owens

1

มันทำงานได้ดีสำหรับฉันที่จะทำสิ่งนี้:

import os
os._exit(0)

นอกจากนี้ยังมีประโยชน์ที่คุณสามารถตั้งรหัสออกได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.