আরকিপি সনাক্ত করতে পারে যে এটি ডেস্কটপ বা সার্ভারে চলছে কিনা?


9

আমি এমন কিছু কোড বিকাশ করছি যা আমি আর্কজিআইএস সার্ভার ওয়েব পরিষেবা এবং স্বতন্ত্র স্ক্রিপ্ট হিসাবে উভয়ই চালাতে চাই। আমি কোনও এজিএস ওয়েব পরিষেবা হিসাবে বা স্ট্যান্ডলোন অজগর হিসাবে / ডেস্কটপের অভ্যন্তরে চলছে কিনা তার উপর নির্ভর করে কার্যকরভাবে সামান্য পরিবর্তন করতে সক্ষম হতে চাই।

এটি সনাক্ত করার কোনও উপায় আছে?

আমি কিছু অনুসন্ধান করেছি কিন্তু খুব সন্তোষজনক কিছু পাই নি। আমি arcpy.mapping.CreateGISServerConnicationFile দেখেছি , তবে এটি বর্তমান পরিবেশ পরীক্ষা করার বিরোধী হিসাবে একটি সার্ভারের সাথে সংযোগ স্থাপন করে। আমি কীভাবে পরিষেবাগুলিতে ডাব্লু / এজিএসে চালিত হয় (যেমন, এটি ) সে সম্পর্কিত তথ্যও চেয়েছি, তবে আমি আরকিপিআইআইএসওয়েবসভার () টাইপ ফাংশনের লাইনে কিছুই দেখছি না। আমার কি কেবল পরিবেশ পরীক্ষা করা দরকার (দেখতে চাই যে "% স্ক্র্যাচফোল্ডার% sys.argv সম্পর্কিত কোনও কিছুর জন্য নির্ধারণ করা হয়েছে বা পরীক্ষা করা আছে)? এক ধরনের অস্থির সমাধান বলে মনে হয়।

উত্তর:


5

আমি এটি প্রস্তাব দিয়েছিলাম, sys.executable, arcpy.GetInstallInfo (), listInstallation (), এবং ProductInfo () এর ফলাফলগুলি দেখার পরে, কোনটিই আমাকে কোন আরকিটি চালাচ্ছিল সে সম্পর্কে ভাল উত্তর দেয় নি। @ খিবমা, আরকি দলের পক্ষে ভাবার মতো কিছু - এটি একটি দুর্দান্ত সম্পত্তি হবে (আরসিপিওভার্সন - যেমন সিসিভারশন)।

>>> import arcpy
>>> arcpy.__file__
'C:\\ArcGIS\\Desktop10.1\\arcpy\\arcpy\\__init__.py'

আমি এই পরীক্ষাটি একটি ফাংশন হিসাবে নিক্ষেপ করেছি। পাইথনের বিটগুলি যদি আপনার জানা দরকার তবে আমি মনে করি যে "32 বিট" রয়েছে বলে স্রেস সিভার্সন পরীক্ষা করা ভাল, তাই আমি এটি অন্তর্ভুক্ত করি নি। আর্কজিআইএস সংস্করণটি খনন করা কিছুটা বেশি কোড তাই আমি এগিয়ে গিয়ে ফাংশনে এটি অন্তর্ভুক্ত করেছি।

# report arcpy platform and version
# author: Curtis Price, cprice@usgs.gov
# date: 2014/08/09 (update to support ArcGIS Pro)

def ArcPyVersion():
    """Report ArcPy version

    example

    >>> ArcPyVersion()
    'Desktop 10.1.3143'
    """
    import arcpy
    f = arcpy.__file__
    if f.find("Desktop") > 0:
      v = "Desktop" 
    elif f.lower().find("arcgis pro") > 0:
      v = "ArcGISPro"
    else:
      v = "Server"
    i = arcpy.GetInstallInfo()
    v = "{0} {1}.{2}".format(
            v, i["Version"], i["BuildNumber"])
    return v 

1
সুতরাং এটি আর্কি .__ ফাইল__, আরকিপি.গেটইনস্টলআইএনফো (), এবং আরসিপি.প্রডাক্ট ইনফো () এর মতো সবগুলিই একই রকম তথ্য উত্পন্ন করবে (এমনকি যদি একটি "ডেস্কটপ" উত্পাদিত করে অন্যটি "আর্কইনফো" তৈরি করে)। আমি আরকিপি ভাবছি r প্রোডাক্টআইএনফো () বিকল্পটি সর্বাধিক সংক্ষিপ্ত এবং পঠনযোগ্য বিকল্প।
রোল্যান্ড

এটি পরীক্ষা করা হয়নি তবে আপনি যদি উদাহরণস্বরূপ "ইম্পোর্ট আর্সিডিটার" দিয়ে আমদানি না করে থাকেন তবে productinfo আপনাকে সর্বোচ্চ উপলব্ধ লাইসেন্স স্তর দিতে পারে)। মানে যদি আপনার কাছে কেবল আর্কিডিটার পাওয়া যায় তবে আপনি সম্ভবত ফিরে পাবেন। মজার বিষয় হ'ল সার্ভারও একই কাজ করে না, যেহেতু এটি একাধিক লাইসেন্সের স্তরকে (বেসিক, স্ট্যান্ডার্ড, এন্টারপ্রাইজ) সমর্থন করে
কার্টিস দাম

লক্ষ করা উচিত যে এই পাইথন কোডটি ধরে নিয়েছে যে সফটওয়্যারটি সাধারণ ফোল্ডার নামকরণ কনভেনশন ব্যবহার করে ইনস্টল করা আছে। ডিফল্ট ফোল্ডারের নাম "ডেস্কটপ ১০.১" ব্যবহার না করা কারও পক্ষে খুব বিরল, তারা যদি পথ ঘুরিয়ে দিতে পারে (উদাহরণস্বরূপ, আমরা "সি: \ আর্কজিআইএস \ ডেস্কটপ ১০.১" এ ইনস্টল করে রেখেছি।
কার্টিস প্রাইস

8

@ খিবা এবং অন্যান্যরা আমাকে ভাবিয়ে তুলেছে যে আমি সংস্করণটি পরীক্ষা করতে আরকিপি ব্যবহার করে তথ্যটি পেতে পারি কিনা। আমি কিছুটা অন্ধভাবে খনন করেছিলাম এবং আমি মনে করি আমার কাছে কিছুটা ছিল যা আমি প্রত্যাশা করি না কেন। আমি এখনও এজিএস এর অধীনে চেক করিনি।

এটি একটি সুন্দর ডিক্ট উত্পাদন করে:

>>> d=arcpy.GetInstallInfo()
>>> d

{'BuildNumber': u'2414',
 'InstallDate': u'5/16/2012',
 'InstallDir': u'C:\\ArcGIS\\Desktop10.0\\',
 'InstallTime': u'16:32:14',
 'InstallType': u'N/A',
 'Installer': u'abock',
 'ProductName': u'desktop',
 'SPBuild': u'10.0.4.4000',
 'SPNumber': u'4',
 'SourceDir': u'\\\\igskahhwvsawesm\\arcgis_10\\Desktop\\Desktop\\',
 'Version': u'10.0'}

সুতরাং আমি বলতে পারি:

if d['ProductName'] == u'desktop':
    ...
else:
    ....

চারপাশে লাথি মারার জন্য ধন্যবাদ!


কেবলমাত্র এটি লক্ষ্য করা গেছে যে এটি 10.1-এ "ডেস্কটপ" হিসাবে ফিরে এসেছে, এত ভাল লোকেশান যাতে ডি ['প্রোডাক্টনাম'] ব্যবহার করতে হয় তবে নিম্ন ()।
রোল্যান্ড

আপনি সার্ভারে ফলাফল কি পোস্ট করতে পারেন? ভবিষ্যতের রেফারেন্স জন্য দরকারী হতে পারে।
পেটর ক্রেবস

স্পষ্টভাবে. দেরি করার জন্য দুঃখিত. আমার সহকর্মীর মধ্য দিয়ে যেতে হয়েছিল যিনি এজিএস ইনস্টলেশন চালাচ্ছেন। 10.1 এর নীচে, তিনি "সার্ভার" পেয়েছেন। আমাদের কাছে 10.0 এজিএস উদাহরণ নেই, তবে কোনও ধরণের মূলধন ফাংশন দিয়ে ফলাফলটি চালানো সম্ভবত একটি ভাল ধারণা।
রোল্যান্ড

আমি আরকিপি.গেটইনস্টলআইএনফো () সম্পর্কে ভুলে গেছি। যদিও এর উদ্দেশ্য আপনি যা চালিয়ে যাচ্ছেন তা আপনাকে জানানোর নয় (এটি লিস্ট ইন্সটলেশনগুলির মতোই একই কাজ করে ... আমি বিশ্বাস করি এটি কেবল ইঞ্জিন | ডেস্কটপ রিটার্ন দেয় যখন 32 থেকে চালানো হয় এবং সার্ভার যখন 64 বিগ পাইথন থেকে চালানো হয় তবে আপনি যদি ' এটি আপনার বার্তায় যেমনটি দেখায় 10.0 এ ফিরে আসবে, সিদ্ধান্ত নেওয়ার জন্য আপনার কাছে সার্ভার এবং ডেস্কটপ উভয়ই থাকবে
KHibma

2
@ রোল্যান্ড তাই আমি সহকর্মীর সাথে কথা বলার পরে আরও কয়েকটি জিনিস পরীক্ষা করেছি। আমার কাছে একই মেশিনে ডিটি / এজিএস সহ 10.0 নেই, তাই এটি কীভাবে হবে তা আমি জানি না তবে "আরকিপি.প্রডাক্ট ইনফো ()" চেষ্টা করুন। এটি আপনাকে আর্কিএনএফও বা আর্কসার্ভার বলে ... এটি আপনি যদি ডিটি-তে চালাচ্ছেন, অথবা স্ক্রিপ্টটি 10.0 এবং 10.1
তে

1
arcpy.ListInstallations()
[u'desktop', u'engine', u'server']

সুতরাং আপনি কী ইনস্টল করেছেন তার একটি চেক করতে পারেন। তবে ডিটি এবং সার্ভার উভয়ই একই মেশিনে ইনস্টল করা থাকলে এটি আপনাকে খুব দূরে পাবেন না। যেমন একটি ফাংশন যা আপনাকে জানায় যে আপনি কী অধীনে চলছেন, না, এর অস্তিত্ব নেই।

উচ্চস্বরে চিন্তা করে: ডিটি 32 বিট, সার্ভারটি 64 বিট। আপনি একটি সিএস.পথ করতে পারেন এবং পাইথনের কোন সংস্করণ ব্যবহার করা হচ্ছে তা পরীক্ষা করতে পারেন।

অথবা

আপনি যদি এটি কোনও জিপি সার্ভিস হিসাবে চালাচ্ছেন (কেবল সার্ভারের অজগর ব্যবহার করছেন না) বনাম ডিটি, আপনি arcpy.env.scratchFolder এর পথটি পরীক্ষা করতে পারেন। একটি সাধারণ ইনস্টল-এ এটি সর্বদা সি: \ আরকিগিজারভার \ ডিরেক্টরিগুলি \ আরকিগিজবজ \ [পরিষেবা] _গস্পারভার \ [গাইড] like .... এর মতো কিছু দেখতে পাবেন \


এবং ভুলে যাবেন না যে আরকিজিআইএস ডেস্কটপ 10.1-তে 64-বিট ব্যাকগ্রাউন্ড জিওপ্রসেসিং ইনস্টল করার বিকল্প রয়েছে যা পাইথন 64৪-বিট ইনস্টল করে।
এমলাউরি


2
RuntimeManager.NET, কোনও COM অবজেক্ট নয়।
পেট্র ক্রেবস

C:\Program Files (x86)\Common Files\ArcGIS\bin\ArcGISVersion.dllএকটি লোডযোগ্য টাইপ লাইব্রেরি যা একই জিনিসগুলির অনেকগুলি থাকে, আপনি কমটিপস থেকে এটি ব্যবহার করতে পারেন।
জেসন শিয়েরার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.