arcpy Masaüstü veya Sunucu'da çalışıp çalışmadığını algılayabilir mi?


9

Hem ArcGIS Server web hizmeti hem de bağımsız bir komut dosyası olarak çalıştırmak istediğiniz bazı kodlar geliştiriyorum. Bir AGS web hizmeti olarak mı yoksa bağımsız bir python / Masaüstü içinde mi çalıştığına bağlı olarak yürütmeyi biraz değiştirebilmek istiyorum.

Bunu tespit etmenin bir yolu var mı?

Biraz arama yaptım ama çok tatmin edici bir şey bulamadım. Arcpy.mapping.CreateGISServerConnectionFile gördüm , ancak bu, geçerli ortamı denetlemenin aksine bir sunucuya bağlantıları ayarlar. Ayrıca hizmetlerin AGS (örneğin, bu ) w / nasıl çalıştırıldığı hakkında bilgi aradım , ama gerçekten bir arcpy.isWebService () türü işlev çizgileri boyunca bir şey görmüyorum. Sadece çevreyi kontrol etmek zorunda mıyım ("% scratchFolder% 'ın ayarlanmış olup olmadığını veya sys.argv ile ilgili bir şeyi inceleyip incelemediğini görmek ister miyim?)?

Yanıtlar:


5

Ben sys.executable, arcpy.GetInstallInfo (), ListInstallations () ve ProductInfo () sonuçlarını inceledikten sonra, hiçbiri bana hangi arkpy çalıştığım konusunda iyi cevap vermedi önerdi. @KHibma, kavisli ekibin düşünmesi gereken bir şey - olması güzel bir özellik (arcpy.version - sys.version gibi) olurdu.

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

Bu testi fonksiyon olarak kullandım. Python bitlerini bilmeniz gerekiyorsa, sadece "32 bit" içerdiği için sys.version'u test etmenin en iyisi olduğunu düşünüyorum, bu yüzden bunu dahil etmedim. ArcGIS sürümünü kazmak biraz daha fazla kod olduğundan devam ettim ve fonksiyona dahil ettim.

# 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
Bu yüzden arcpy .__ file__, arcpy.GetInstallInfo () ve arcpy.ProductInfo (), benzer bilgiler verir (biri "Desktop" üretirken, diğeri "ArcInfo" üretse bile). Arcpy.ProductInfo () seçeneğinin en kısa ve okunabilir seçenek olduğunu düşünüyorum.
Roland

Test etmediniz, ancak özellikle "içe aktarma arceditor" ile içe aktarmadıysanız productinfo size mümkün olan en yüksek lisans seviyesini verebilir). Yani sadece ArcEditor'ınız varsa, muhtemelen geri döneceksiniz. Sunucu aynı şeyi yapmadığı için komik, çünkü çoklu lisans seviyelerini de destekliyor (temel, standart, kurumsal)
Curtis Price

Bu Python kodu, yazılımın normal klasör adlandırma kuralları kullanılarak yüklendiğini varsayar. Birinin yolu hareket ettirebilmesi durumunda varsayılan "Desktop10.1" klasör adını kullanmaması oldukça nadirdir (örneğin, "C: \ ArcGIS \ Desktop10.1" e yükleriz.
Curtis Price

8

@KHibma ve diğerleri, sürümü kontrol etmek için arcpy kullanarak bilgiyi alıp alamayacağımı merak ettiler. Biraz körü körüne dolaştım ve sanırım beklediğim şey olmasa bile bir şeyim var. Henüz AGS kapsamında kontrol etmedim.

Güzel bir diksiyon üretir:

>>> 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'}

Yani şunu söyleyebilirim:

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

Bunu tekmelediğiniz için teşekkürler!


Sadece bunun 10.1'de "Masaüstü" olarak geri geldiğini fark ettim, eğer d ['ProductName'] ifadesini kullanacaksa daha iyi bir konuma sahip olun.
Roland

Sonuçların ne olduğunu Sunucuya gönderebilir misiniz? İleride başvurmak için yararlı olabilir.
Petr Krebs

Kesinlikle. Gecikme için üzgünüm. AGS kurulumunu yürüten meslektaşımdan geçmek zorunda kaldım. 10.1 altında "Sunucu" aldı. 10.0 AGS örneğimiz yok, ancak sonucu bir tür büyük harf işlevi aracılığıyla yürütmek muhtemelen iyi bir fikirdir.
Roland

Arcpy.GetInstallInfo () 'u unuttum. Amacı size ne altında çalıştığınızı söylemek olmasa da (ListInstallations ile aynı davranıyor ... 64 bit Python'dan çalıştırıldığında 32 ve sunucudan yalnızca motor | masaüstü döndürdüğüne inanıyorum. mesajınızda göründüğü gibi 10.0'a dönün, hem sunucuya hem de masaüstüne karar vereceksiniz
KHibma

2
@Roland, bir meslektaşımla konuştuktan sonra birkaç şeyi daha test ettim. Aynı machien DT / AGS ile 10.0 yok, bu yüzden bu nasıl gideceğini bilmiyorum, ama "arcpy.ProductInfo ()" deneyin. Size ArcINFO veya ArcSERVER söyler ... DT'de çalışıyorsanız veya BOTH 10.0 ve 10.1'de bir GP Hizmeti olarak komut dosyası kullanıyorsanız, bu aslında sizin için yapabilir
22

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

Böylece neyin yüklü olduğunu kontrol edebilirsiniz. Ancak DT ve Server aynı makineye yüklüyse bu sizi çok ileriye götürmez. Altında ne koştuğunu söyleyen bir fonksiyona gelince, hayır, mevcut değil.

Yüksek sesle düşünmek: DT 32bit, Sunucu 64bit. Bir sys.path yapabilir ve hangi Python sürümünün kullanıldığını kontrol edebilirsiniz.

veya

Bir DT Servisi (sadece python kullanarak değil) DT olarak çalıştığını biliyorsanız, arcpy.env.scratchFolder yolunu inceleyebilirsiniz. Tipik bir kurulumda her zaman C: \ arcgisserver \ directories \ arcgisjobs \ [service] _gpserver \ [guid] \ gibi bir şey görünecektir.


Ayrıca, ArcGIS Desktop 10.1'in Python 64 bit'i yükleyen 64 bit arka plan coğrafi işleme yükleme seçeneğine sahip olduğunu unutmayın.
MLowry


2
RuntimeManager.NET nesnesidir, COM nesnesidir.
Petr Krebs

C:\Program Files (x86)\Common Files\ArcGIS\bin\ArcGISVersion.dllaynı nesnelerin çoğuna sahip yüklenebilir bir tür kütüphanesidir, bunu comtypes'den kullanabilirsiniz.
Jason Scheirer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.