Làm cách nào để truy cập id công việc hiện tại từ tập lệnh xử lý địa lý đang chạy trên máy chủ esri?


8

Tôi muốn truy cập theo chương trình id công việc hiện tại của tập lệnh xử lý địa lý đang chạy trên ESRI 10.2. Kịch bản là những gì cần biết id công việc, không phải người gọi của kịch bản.

Trong khi tìm kiếm, tôi đã thấy rất nhiều ví dụ về cách gửi yêu cầu công việc trả về với id công việc. Đây không phải là điều tôi muốn.

Trong tập lệnh của tôi đang chạy trên máy chủ, tôi muốn đưa id công việc vào nhật ký, tuy nhiên tôi chưa tìm thấy cách lấy công việc trong tập lệnh. Tôi đã kiểm tra ban đầu arcpy.env, nhưng tôi không thấy gì cả. Tôi nên tìm ở đâu nữa?


2
Bạn muốn dịch vụ chạy báo cáo jobId? Không có bất cứ điều gì tiếp xúc để làm điều này. Bạn có thể sử dụng mô-đun 'os' để phân tích các đường dẫn và lấy nó từ đó.
KHibma

1
Điều đó thật đáng thất vọng. Tôi đã suy nghĩ theo cùng một dòng như bạn đề nghị; cảm ơn vì đã xác nhận những nghi ngờ của tôi
pundy2

@KHibma, có cách nào đơn giản để xác định xem tập lệnh có chạy trên máy chủ không thông qua arcmap không?
pundy2

1
Như Kevin đề xuất, tôi khuyên bạn nên cố gắng lấy id công việc bằng cách xem qua các thư mục được tạo trong thư mục arcgisserver / arcgisjobs. Bạn có thể muốn xem thư mục nào được tạo cuối cùng và lấy tên của nó.
Alex Tereshenkov

@ pgreen2 kiểm tra chủ đề này: gis.stackexchange.com/questions/64937/NH
KHibma

Câu trả lời:


6

Tôi nhớ một kịch bản cũ tôi sử dụng để thử nghiệm vì vậy tôi nghĩ tôi muốn chia sẻ. Có lẽ nó sẽ giúp bạn hoặc người khác. Tôi đã thêm logic để có được GUID. Có lẽ có một cách tốt hơn để làm điều đó, nhưng nó hoạt động.

import arcpy, sys, socket, os

theExe = sys.executable

arcpy.AddMessage("the executable    : " + theExe)
arcpy.AddMessage("where is arcpy    : " + str(arcpy.__file__))
arcpy.AddMessage("the install dir   : " + str(arcpy.GetInstallInfo()["InstallDir"]))
arcpy.AddMessage("the product is    : " + str(arcpy.GetInstallInfo()["ProductName"]))
arcpy.AddMessage("the py version is : " + str(sys.version))
arcpy.AddMessage("hostname          : " + str(socket.gethostname()))
arcpy.AddMessage("path              : " + str(sys.path[0]))
arcpy.AddMessage("path              : " + str(os.path.dirname(__file__)))
arcpy.AddMessage("working dir       : " + str(os.getcwd()))
scr = arcpy.env.scratchFolder
arcpy.AddMessage(scr)  
if "server" in theExe.lower():
    guid = os.path.split(os.path.split(scr)[0])[1] #split 'scratch' off, then split remainder and grab guid    
    arcpy.AddMessage(guid)

arcpy.AddMessage("--------------------------------")
arcpy.AddMessage(arcpy.ProductInfo())
arcpy.AddMessage(arcpy.GetInstallInfo())

3

Bạn cũng có thể sử dụng arcpy.env.scratchWorkspace khi trả về:

"e:\arcgisserver\directories\arcgisjobs\analysis\your_program\j83b20a86cc2d471cb684b4ce0aa9b81b\scratch"

Để tách id công việc khỏi chuỗi:

job_id = arcpy.env.scratchWorkspace.rsplit("\\", 2)[1]
>>>"j83b20a86cc2d471cb684b4ce0aa9b81b"

Đó là một trong những tuyệt vời!
Alex Tereshenkov
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.