पायथन स्क्रिप्ट चलाने के बाद QGIS से बाहर कैसे निकलें?


10

मैं के माध्यम से एक अजगर स्क्रिप्ट चलाने के लिए qgis --code myscript.pyऔर फिर तुरंत बाहर निकलना चाहते हैं। मैं उपयोग कर रहा हूं iface.actionExit().trigger(), जो कि क्यूजीआईएस को मारता है जब मैं इसे अजगर कंसोल से चलाता हूं, लेकिन उस स्क्रिप्ट में नहीं डाला जाता है जिसे मैं पास करता हूं --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
आप कर सकते हैं लेकिन क्यों?
नाथन डब्ल्यू

1
मैं स्वचालित रूप से एक प्रिंट संगीतकार के साथ एक पीडीएफ बना रहा हूं ( --screenshotझंडा बस इसे काट नहीं करता है)।
कॉनले ओवंस

क्या आप अपने कोड को प्रश्न में शामिल कर सकते हैं क्योंकि यह संभावित उत्तरदाताओं की मदद कर सकता है? मैं यह पूछता हूं क्योंकि मैंने sys.exit()अपनी स्क्रिप्ट में भी काम किया है।
जोसेफ

echo "sys.exit()" > code.py; qgis --code code.pyQGIS का कौन सा संस्करण आप चला रहे थे? आप स्क्रिप्ट को कैसे लागू कर रहे थे?
कॉनले ओवंस

जवाबों:


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()

मैंने स्क्रिप्ट के फ़ोल्डर के अंदर bash कंसोल पर qgis --code myscript.py चलाया , और तुरंत ही मुझे यह त्रुटि मिल गई:

यहां छवि विवरण दर्ज करें

और यह दर्शाता है कि qgis.utils से iface लाइन आयात करना आवश्यक है।

जब पहली पंक्ति टिप्पणी नहीं की जाती है तो स्क्रिप्ट निष्पादन में त्रुटियां नहीं थीं:

यहां छवि विवरण दर्ज करें

लेकिन नियंत्रण पायथन कंसोल में नहीं था; यह बैश कंसोल में है (वहां "हैलो" प्रिंट देखें)। इस कारण से आपका os.kill (os.getpid (), 9) कमांड काम करता है क्योंकि कंसोल को बंद करें और स्वचालित रूप से QGIS को बंद करें।

इस मुद्दे का हल है, अगर मैं QGIS बाहर PyQGIS एपीआई की जरूरत है, यह QGIS (करने के लिए PYTHONPATH शामिल करने के लिए था / usr / share / QGIS / अजगर मेरी में) .bashrc और के रूप में बैश कंसोल में स्क्रिप्ट चलाने के लिए अजगर myscript। चिता । यह काम करता हैं।

Windows में, आप QGIS के पायथन कंसोल में PYTHONPATH प्राप्त कर सकते हैं:

import os
os.getcwd()

और इसे बदलने के लिए विंडोज के कंट्रोल पैनल का उपयोग करें।


1
मैंने इसकी कोशिश की (जैसा कि मूल प्रश्न में उल्लेख किया गया है)। यह काम नहीं करता है। क्या आपने वास्तव में --codeविकल्प से या केवल कंसोल से यह कोशिश की है? QGIS का कौन सा संस्करण आप चला रहे हैं?
कॉनले ओवंस

कृपया, मेरा "एडिटिंग नोट" देखें।
xunilk

1
मदद के लिए धन्यवाद, लेकिन मुझे यकीन नहीं है कि आप बैश कंसोल में स्क्रिप्ट को चलाने से क्या मतलब है python myscript.py, क्या आप सुझाव दे रहे हैं कि मैं क्यूजी के बाहर एपीआई का उपयोग करता हूं, जहां मुझे QgsApplication.initQgis()प्रोजेक्ट चलाने और लोड करने के सभी ओवरहेड को संभालना होगा खुद? यदि हां, तो यह पूरी तरह से अलग मार्ग है।
कॉनले ओवंस

1

ऐसा करने के लिए यह मेरे लिए अच्छा काम करता है:

import os
os._exit(0)

यह भी उपयोगी है कि आप एक निकास कोड सेट कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.