Arcpy có thể phát hiện xem nó đang chạy trong Desktop hay Server không?


9

Tôi đang phát triển một số mã mà tôi muốn chạy cả dưới dạng dịch vụ web ArcGIS Server và dưới dạng tập lệnh độc lập. Tôi muốn có thể sửa đổi thực thi một chút tùy thuộc vào việc nó chạy như một dịch vụ web AGS hay là một con trăn độc lập / trong Desktop.

Có cách nào để phát hiện điều này?

Tôi đã thực hiện một số tìm kiếm nhưng không tìm thấy bất cứ điều gì rất thỏa đáng. Tôi đã thấy arcpy.micking.CreateGISServerConnectionFile, nhưng điều này đặt các kết nối đến một máy chủ thay vì kiểm tra môi trường hiện tại. Tôi cũng đã tìm kiếm thông tin về cách các dịch vụ được chạy trong AGS (ví dụ: cái này ), nhưng tôi không thực sự thấy bất cứ điều gì dọc theo dòng của một loại hàm arcpy.isWebService (). Tôi chỉ cần kiểm tra môi trường (muốn xem liệu "% scratchFolder% đã được đặt hay kiểm tra thứ gì đó liên quan đến sys.argv)? Có vẻ như là một giải pháp không ổn định.

Câu trả lời:


5

Tôi đã đề xuất điều này, sau khi xem qua các kết quả của sys.executable, arcpy.GetInstallInfo (), ListInstallations () và ProductInfo (), không ai trong số đó cho tôi câu trả lời hay về việc tôi đang chạy Arcpy nào. @KHibma, một cái gì đó để nhóm Arcpy nghĩ về - đó sẽ là một tài sản tốt đẹp (arcpy.version - như sys.version) để có.

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

Tôi thực hiện bài kiểm tra này như là một chức năng. Nếu bạn cần biết các bit Python, tôi nghĩ tốt nhất là chỉ kiểm tra sys.version để chứa "32 bit" vì vậy tôi đã không bao gồm điều đó. Khai thác phiên bản ArcGIS là một mã nhiều hơn một chút vì vậy tôi đã tiếp tục và đưa nó vào chức năng.

# 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
Vì vậy, nó có vẻ như arcpy .__ file__, arcpy.GetInstallInfo () và arcpy. ProducttInfo () sẽ mang lại thông tin tương tự (ngay cả khi một cái tạo ra "Desktop" trong khi cái kia tạo ra "ArcInfo"). Tôi đang nghĩ tùy chọn arcpy. ProducttInfo () là tùy chọn ngắn gọn và dễ đọc nhất.
Roland

Chưa kiểm tra nhưng sản phẩm có thể cung cấp cho bạn mức giấy phép khả dụng cao nhất nếu bạn chưa nhập cụ thể bằng "arceditor nhập khẩu" chẳng hạn). Có nghĩa là nếu bạn chỉ có ArcEditor, đó là những gì bạn có thể sẽ nhận lại. Thật buồn cười là Máy chủ không làm điều tương tự, vì nó cũng hỗ trợ nhiều cấp giấy phép (cơ bản, tiêu chuẩn, doanh nghiệp)
Giá của Curtis

Cần lưu ý rằng mã Python này giả định phần mềm được cài đặt bằng cách sử dụng các quy ước đặt tên thư mục thông thường. Rất hiếm khi ai đó không sử dụng tên thư mục mặc định "Desktop10.1" nếu họ có thể di chuyển đường dẫn xung quanh (ví dụ: chúng tôi cài đặt vào "C: \ ArcGIS \ Desktop10.1".
Giá của Curtis

8

@KHibma và những người khác khiến tôi tự hỏi liệu tôi có thể lấy thông tin bằng cách sử dụng arcpy để kiểm tra phiên bản không. Tôi đã đào xung quanh một cách mù quáng và tôi nghĩ rằng tôi đã có một cái gì đó ngay cả khi đó không phải là điều tôi đang mong đợi. Tôi chưa kiểm tra theo AGS.

Nó tạo ra một câu lệnh hay:

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

Vì vậy, tôi có thể nói:

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

Cảm ơn vì đã đá xung quanh!


Chỉ cần lưu ý rằng điều này trở lại là "Máy tính để bàn" trong 10.1, vì vậy, locase tốt hơn là nếu câu lệnh sử dụng d ['ProductName']. Lower ().
Roland

Bạn có thể đăng những gì kết quả trên máy chủ? Có thể hữu ích để tham khảo trong tương lai.
Petr Krebs

Chắc chắn rồi. Xin lỗi về sự chậm trễ. Phải thông qua đồng nghiệp của tôi, người điều hành cài đặt AGS. Dưới 10.1, anh ta nhận được "Máy chủ". Chúng tôi không có ví dụ 10.0 AGS, nhưng chạy kết quả thông qua một số loại chức năng viết hoa có lẽ là một ý tưởng tốt.
Roland

Tôi quên mất arcpy.GetInstallInfo (). Mặc dù mục đích của nó không phải là để cho bạn biết bạn đang chạy theo cái gì (nó hoạt động giống như ListInstallations ... Tôi tin rằng nó chỉ trả về engine | máy tính để bàn khi chạy từ 32 và máy chủ khi chạy từ Python 64 bit. Nhưng nếu bạn trở lại vào lúc 10.0 như nó hiển thị trong tin nhắn của bạn, bạn sẽ có cả máy chủ và máy tính để bàn để quyết định
KHibma

2
@Roland vì vậy tôi đã thử nghiệm thêm một vài điều sau khi nói chuyện với một đồng nghiệp. Tôi không có 10.0 với DT / AGS trên cùng một machien, vì vậy tôi không biết điều này sẽ diễn ra như thế nào, nhưng hãy thử "arcpy. ProducttInfo ()". Nó cho bạn biết ArcINFO hoặc ArcSERVER ... điều này thực sự có thể làm điều đó cho bạn NẾU bạn đang chạy trên DT hoặc tập lệnh dưới dạng Dịch vụ GP trong
BÓNG

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

Vì vậy, bạn có thể kiểm tra những gì đã cài đặt. Tuy nhiên, điều này sẽ không giúp bạn tiến xa nếu cả DT và Server được cài đặt trên cùng một máy. Đối với một chức năng cho bạn biết những gì bạn đang chạy, không, không tồn tại.

Suy nghĩ thành tiếng: DT là 32 bit, Máy chủ là 64 bit. Bạn có thể thực hiện một sys.path và kiểm tra phiên bản Python nào đang được sử dụng.

hoặc là

Nếu bạn biết dịch vụ này hoạt động như một Dịch vụ GP (không chỉ sử dụng python của máy chủ) so với DT, bạn có thể kiểm tra đường dẫn của arcpy.env.scratchFolder. Trong một cài đặt thông thường, nó sẽ luôn trông giống như C: \ arcgisserver \ Directory \ arcgisjobs \ [service] _gpserver \ [guide] \ ....


Và đừng quên rằng ArcGIS Desktop 10.1 có tùy chọn cài đặt xử lý địa lý nền 64 bit, cài đặt Python 64 bit.
MLowry


2
RuntimeManagerlà .NET, không phải là đối tượng COM.
Petr Krebs

C:\Program Files (x86)\Common Files\ArcGIS\bin\ArcGISVersion.dlllà một thư viện loại có thể tải có nhiều đối tượng giống nhau, bạn có thể sử dụng nó từ comtypes.
Jason Scheirer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.