क्या यह डेस्कटॉप या सर्वर में चल रहा है या नहीं इसका पता लगा सकते हैं?


9

मैं कुछ कोड विकसित कर रहा हूं, जिन्हें मैं एक आर्कगिस सर्वर वेब सेवा और एक स्टैंडअलोन स्क्रिप्ट के रूप में चलाना चाहता हूं। मैं निष्पादन को थोड़ा संशोधित करने में सक्षम होना चाहता हूं, चाहे यह एजीएस वेब सेवा के रूप में चल रहा हो या डेस्कटॉप के भीतर एक स्टैंडअलोन पायथन के रूप में।

क्या इसका पता लगाने का कोई तरीका है?

मैंने कुछ खोज की है लेकिन कुछ भी संतोषजनक नहीं पाया है। मैंने arcpy.mapping.CreateGISServerConnectionFile देखा है , लेकिन यह वर्तमान परिवेश की जाँच के विपरीत सर्वर से कनेक्शन सेट करता है। मैंने यह भी देखा है कि एजीएस (जैसे, यह ) में सेवाएं कैसे संचालित होती हैं, इस बारे में जानकारी के लिए मैंने देखा है , लेकिन मैं वास्तव में कुछ भी नहीं देख रहा हूं, जैसे कि एक आर्कपी.विसबस सर्विस () प्रकार के फ़ंक्शन। क्या मुझे केवल पर्यावरण की जांच करने की आवश्यकता है (जैसे कि अगर "% scratchFolder% सेट किया गया है या sys.argv से संबंधित कुछ की जांच कर रहा है) को देखने की आवश्यकता है? एक अस्थिर समाधान की तरह लगता है।

जवाबों:


5

मैंने sys.executable, arcpy.GetInstallInfo (), ListInstallations (), और ProductInfo () के परिणामों को देखने के बाद यह सुझाव दिया, जिनमें से किसी ने भी मुझे इस बात का अच्छा जवाब नहीं दिया कि मैं कौन सा आर्कटिक चला रहा था। @ शिम्बा, कुछ सोचने के लिए चापलूसी टीम के लिए - यह एक अच्छी संपत्ति होगी (arcpy.version - जैसे sys.version)।

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

मैंने इस परीक्षण को एक समारोह के रूप में रखा। यदि आपको पायथन बिट्स को जानने की आवश्यकता है, तो मुझे लगता है कि "32 बिट" के लिए सिर्फ sys.version का परीक्षण करना सबसे अच्छा है, इसलिए मैंने इसे शामिल नहीं किया। आर्कगिस संस्करण को खोदना थोड़ा अधिक कोड है इसलिए मैंने इसे आगे बढ़ाया और फ़ंक्शन में शामिल किया।

# 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
तो ऐसा लगता है कि आर्कपी .__ file__, arcpy.GetInstallInfo (), और arcpy.ProductInfo () सभी समान जानकारी प्राप्त करेंगे (भले ही एक "डेस्कटॉप" का उत्पादन करता है, जबकि दूसरा "ArcInfo" का उत्पादन करता है)। मैं arcpy.ProductInfo सोच रहा हूँ () विकल्प सबसे संक्षिप्त और पठनीय विकल्प है।
रोलैंड

यदि आपने इसे विशेष रूप से "आयात आर्सेटर" के साथ आयात नहीं किया है तो उदाहरण के लिए productinfo आपको उच्चतम उपलब्ध लाइसेंस स्तर दे सकता है)। मतलब अगर आपके पास केवल ArcEditor उपलब्ध है, तो वही होगा जो आप शायद वापस पा लेंगे। अजीब बात है कि सर्वर एक ही काम नहीं करता है, क्योंकि यह कई लाइसेंस स्तरों (मूल, मानक, उद्यम) का समर्थन करता है
कर्टिस प्राइस

यह ध्यान दिया जाना चाहिए कि यह पायथन कोड मानता है कि सॉफ्टवेयर सामान्य फ़ोल्डर नामकरण सम्मेलनों का उपयोग करके स्थापित किया गया है। यदि कोई व्यक्ति डिफ़ॉल्ट फ़ोल्डर नाम "Desktop10.1" का उपयोग नहीं करता है, तो यह बहुत दुर्लभ है, यदि वे पथ को चारों ओर ले जा सकते हैं (उदाहरण के लिए, हम "C: \ ArcGIS \ Desktop10.1" पर इंस्टॉल करते हैं।
कर्टिस प्राइस

8

@KHibma और अन्य लोगों ने मुझे आश्चर्यचकित किया कि क्या मुझे संस्करण की जांच करने के लिए आर्कपी का उपयोग करके जानकारी मिल सकती है। मैंने कुछ हद तक आंखें खोलीं और मुझे लगता है कि मुझे कुछ मिल गया है, भले ही वह वह न हो जिसकी मुझे उम्मीद थी। मैंने एजीएस के तहत अभी तक जाँच नहीं की है।

यह एक अच्छा तानाशाही पैदा करता है:

>>> 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 में "डेस्कटॉप" के रूप में वापस आता है, इसलिए बेहतर लोकेशन है कि यदि d ['ProductName'] का उपयोग करने के लिए स्टेटमेंट कम है ()।
रोलैंड

क्या आप सर्वर पर परिणाम क्या पोस्ट कर सकते हैं? भविष्य के संदर्भ के लिए उपयोगी हो सकता है।
पेट्र क्रेब्स

निश्चित रूप से। विलंब के लिए क्षमा चाहते हैं। मेरे सहयोगी के माध्यम से जाना था जो एजीएस स्थापना चलाता है। 10.1 के तहत, उसे "सर्वर" मिला। हमारे पास 10.0 AGS उदाहरण नहीं है, लेकिन कुछ प्रकार के कैपिटलाइज़ेशन फ़ंक्शन के माध्यम से परिणाम चलाना संभवतः एक अच्छा विचार है।
रोलैंड

मैं arcpy.GetInstallInfo () के बारे में भूल गया। हालांकि इसका उद्देश्य यह नहीं है कि आप यह बताएं कि आप किस चीज के तहत चल रहे हैं (यह ListInstallations के समान ही काम करता है ... मेरा मानना ​​है कि यह केवल रिटर्न इंजन है। डेस्कटॉप जब 32 से चलाया जाता है और 64 बिट पायथन से चलने पर सर्वर। लेकिन यदि आप '। 10.0 पर वापस जाएं जैसे यह आपके संदेश में दिखाता है, आपके पास निर्णय लेने के लिए सर्वर और डेस्कटॉप दोनों होंगे
KHibma

2
@ रोलैंड इसलिए मैंने एक सहयोगी से बात करने के बाद कुछ और चीजों का परीक्षण किया। मेरे पास एक ही मशीन पर DT / AGS के साथ 10.0 नहीं है, इसलिए मुझे नहीं पता कि यह कैसे चलेगा, लेकिन "arcpy.ProductInfo ()" का प्रयास करें। यह आपको ArcINFO या ArcSERVER बताता है ... यह वास्तव में आपके लिए कर सकता है यदि आप DT पर चल रहे हैं, या BOTH में GP सेवा के रूप में स्क्रिप्ट 10.0 और 10.1
KHibma

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

तो आप इंस्टॉल किए गए व्हाट्स का चेक कर सकते हैं। हालाँकि यह बहुत दूर नहीं होगा यदि डीटी और सर्वर दोनों एक ही मशीन पर स्थापित हों। एक फ़ंक्शन के लिए जैसा कि आपको बताता है कि आप किस चीज़ के नीचे चल रहे हैं, नहीं, मौजूद नहीं है।

ज़ोर से सोचना: डीटी 32 बिट है, सर्वर 64 बिट है। आप एक sys.path कर सकते हैं और निरीक्षण कर सकते हैं कि पायथन के किस संस्करण का उपयोग किया जा रहा है।

या

यदि आप जानते हैं कि इसका या तो जीपी सेवा के रूप में चल रहा है (न कि केवल सर्वर के अजगर का उपयोग करके) बनाम डीटी, तो आप arcpy.env.scratchFolder के पथ का निरीक्षण कर सकते हैं। एक विशिष्ट इंस्टॉलेशन पर यह हमेशा C: \ arcgisserver \ directory \ arcgisjobs \ [सेवा] _gpserver \ [guide] \ .... जैसा दिखाई देगा।


और यह मत भूलो कि आर्कगिस डेस्कटॉप 10.1 में 64-बिट बैकग्राउंड जियोप्रोसेसिंग स्थापित करने का विकल्प है जो पायथन 64-बिट स्थापित करता है।
विधायक

क्या इस विधि को अजगर से कॉल करने के लिए नहीं दिया जाएगा, जिससे आप RuntimeManager.ActiveRuntime को कॉल कर सकते हैं ?
कर्क कुक्केंडल

2
RuntimeManager.NET है, COM ऑब्जेक्ट नहीं है।
पेट्र क्रेब्स

C:\Program Files (x86)\Common Files\ArcGIS\bin\ArcGISVersion.dllएक लोड करने योग्य प्रकार पुस्तकालय है जिसमें कई समान वस्तुएं हैं, आप इसका उपयोग कॉमटेप्स से कर सकते हैं।
जेसन शहीर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.