পাইথন স্ক্রিপ্ট চালানোর পরে কিউজিআইএস থেকে কীভাবে প্রস্থান করবেন?


10

আমি পাইথন স্ক্রিপ্টটি চালাতে চাই qgis --code myscript.pyএবং তার সাথে সাথে প্রস্থান করবো । আমি ব্যবহার করছি iface.actionExit().trigger(), যা আমি পাইথন কনসোল থেকে চালানোর সময় কিউজিআইএসকে মেরে ফেলি, তবে যখন আমি স্ক্রিপ্টটি পাস করি না তখন তা নয় --code

অবিলম্বে প্রস্থান করার সঠিক উপায় কী? আমি কিউজিআইএস ২.০.২ চালাচ্ছি

আপডেট : আমি চেষ্টা করেছি sys.exit()। কিউজিআইএস এটি ধরে এবং নিম্নলিখিতগুলির সাথে একটি উইন্ডো পপ আপ করে:

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.pyআপনি কিউজিআইএস-র কোন সংস্করণটি চালাচ্ছিলেন? আপনি কীভাবে স্ক্রিপ্টগুলি চালাচ্ছেন?
কনলি

উত্তর:


5

আপনার স্ক্রিপ্টে চেষ্টা করুন:

from qgis.utils import iface

#your code here

iface.actionExit().trigger()

এটা আমার জন্য কাজ করে.

সম্পাদনা নোট:

কনলে ওভেনস কমেন্ট অবলম্বনে, আমি আমার স্ক্রিপ্টটি কিছুটা "দরকারী কিছু" করার জন্য পরিবর্তিত করেছি (যেখানে লাইনটি iface আমদানি করে মন্তব্য করা হয়েছিল)।

#from qgis.utils import iface
import os

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

iface.actionExit().trigger()

আমি স্ক্রিপ্টটির ফোল্ডারের ভিতরে বাশ কনসোলে Qgis --code myscript.py চালিয়েছি এবং ততক্ষনে আমি এই ত্রুটি বার্তাটি পেয়েছি:

এখানে চিত্র বর্ণনা লিখুন

এবং Qgis.utils থেকে iface লাইন আমদানি করা ইঙ্গিত করে ।

যখন প্রথম লাইনে মন্তব্য করা হয় না তখন স্ক্রিপ্টের প্রয়োগে ত্রুটি ছিল না:

এখানে চিত্র বর্ণনা লিখুন

তবে নিয়ন্ত্রণ পাইথন কনসোলে ছিল না; এটি বাশ কনসোলে রয়েছে (সেখানে "হ্যালো" মুদ্রণটি পর্যবেক্ষণ করুন)। এই কারণে আপনার os.kill (os.getpid (), 9) কমান্ড কাজ করে কারণ কনসোলটি বন্ধ করুন এবং স্বয়ংক্রিয়ভাবে QGIS বন্ধ করুন।

এই সমস্যার সমাধান, যদি আমার কিউজিসআইএসের বাইরে পাইকিজিআইএসআইপি এপিআই দরকার হয় তবে এটি পাইথনপথকে কিউজিআইএস ( / usr / share / qgis / পাইথন ) কে আমার .bashrc এ অন্তর্ভুক্ত করা এবং পাইথন ম্যাসক্রিপ্ট হিসাবে ব্যাশ কনসোলে স্ক্রিপ্ট চালানো ছিল। PY । এটা কাজ করে।

উইন্ডোজে, আপনি কিউজিআইএস-এর পাইথন কনসোলে পাইথনপথটি পেতে পারেন:

import os
os.getcwd()

এবং এটি পরিবর্তন করতে উইন্ডোজের নিয়ন্ত্রণ প্যানেলটি ব্যবহার করুন।


1
আমি এটি চেষ্টা করেছিলাম (মূল প্রশ্নে উল্লিখিত হিসাবে) এটি কাজ করে না। আপনি কি --codeবিকল্প থেকে বা কেবল কনসোল থেকে এটি চেষ্টা করেছেন ? আপনি কিউজিআইএস-র কোন সংস্করণটি চালাচ্ছেন?
কনলি

দয়া করে, আমার "সম্পাদনা নোট" দেখুন।
xunilk

1
সহায়তার জন্য ধন্যবাদ, তবে বাশ কনসোলে স্ক্রিপ্টটি চালানোর মাধ্যমে আপনি কী বোঝাতে চাইছেন তা আমি নিশ্চিত নই python myscript.py, আপনি কিজিগিসের বাইরের এপিআই ব্যবহার করার পরামর্শ দিচ্ছেন যেখানে আমি তখন QgsApplication.initQgis()প্রকল্পটি চালাবার এবং লোড করার সমস্ত ওভারহেড পরিচালনা করতে হবে? নিজেকে? যদি তা হয় তবে এটি পুরোপুরি ভিন্ন পথে চলছে।
কনলি

1

এটি করা আমার পক্ষে ভাল কাজ করে:

import os
os._exit(0)

এটি কার্যকর যে আপনি একটি প্রস্থান কোড সেট করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.