Я занимаюсь некоторыми исследованиями по этому вопросу, но все вопросы (в моем понимании новичков), похоже, направлены на то, как выяснить, работает ли программа ANOTHER, а не сам Python.Как узнать, работает ли процесс в Python?
Итак, в настоящее время я работаю над кодом, который генерирует буферы вокруг набора строк в шейп-файле. Это пакетный процесс, который включает в себя 20 шейп-файлов и до 4000 строк внутри них. Процесс занимает очень много времени, и я начинаю задаваться вопросом, действительно ли он работает. Обычно я использую операторы печати, чтобы отслеживать ход моего кода, но в этом случае я вызываю ArcGIS для выполнения этой функции, поэтому единственным оператором печати, который я могу написать, является один ПОСЛЕ того, как все строки были обработаны, а не пока все еще Бег.
Есть ли способ узнать, продолжается ли процесс (кроме проверки диспетчера задач, чтобы убедиться, что он заблокирован)?
безумный способ сделать это Я думал (не знаю, возможно ли что-то подобное): я думал о чем-то вроде написания чего-либо в txt-файле каждые X минут, пока скрипт не закончил работать ,
Спасибо !!!!
Мой код:
def Buffer30m(self,InputFile,OutputBuffer, size):
arcpy.Buffer_analysis(InputFile,OutputBuffer,size,"FULL","ROUND","NONE","#")
TheList=os.listdir(SSFlinespath) #read the files in the folder
os.mkdir(SSFlines+"SSFbuffers" #create folder for the output
SSbuff=SSFlinespath+"SSFbuffers/" #select the folder as destination
try:
size=30
for TheFile in TheList: #Identify each file
TheFileName, TheFileExtension = os.path.splitext(TheFile) #Break up the file name
if (TheFileExtension==".shp"): #Identify the shapefiles
TheLines=SSFlines+TheFile
##Generate a 30m buffer around the lines
TheBuffer=SSFbuff+TheFileName+"_buff30.shp"
TheStepBuffer.Buffer30m(TheLines,TheBuffer,size)
print "SSF buffer done"
except Exception as TheError:
print "Error with the SSF forest area calculation"
print TheError
UPDATE Частичное решение, полный код и новый вопрос:
Я применил предложение qwwqwwq, которая прекрасно работает для функции я уже упоминал ранее. Дело в том, что когда я запускаю оставшуюся часть моего скрипта (то, что я показал раньше, было только частью этого, поэтому вам не пришлось бы так много читать), некоторые из других функций не работают.
Вот полный скрипт:
class StepBuffer:
def GetPairInfo (self, MainFile, SourceFile, WantFields, SSF):
fields= WantFields #Fields I will keep
##Extract the info and add to the main table
if SSF==False:
GRHE_proj.GetFieldInfo(MainFile,SourceFile,"Pair", "Pair", fields)
elif SSF==True:
GRHE_proj.GetFieldInfo(MainFile,SourceFile,"SAMPLEID", "SAMPLEID", fields)
def Buffer30m(self,InputFile,OutputBuffer, size):
arcpy.Buffer_analysis(InputFile,OutputBuffer,size,"FULL","ROUND","NONE","#")
def AreaBuff (self,InputFile, OutputTable):
arcpy.CalculateAreas_stats(InputFile,OutputTable)
def AreaForest (self,BufferFile,ForestFile, OutputTable, SSF):
if SSF==False:
arcpy.TabulateIntersection_analysis(BufferFile,"Pair",ForestFile,OutputTable,"type","#","#","HECTARES")
elif SSF==True:
arcpy.TabulateIntersection_analysis(BufferFile,"SAMPLEID",ForestFile,OutputTable,"type","#","#","HECTARES")
TheList=os.listdir(SSFlinespath) #read the files in the folder
os.mkdir(SSFlines+"SSFbuffers" #create folder for the output
SSbuff=SSFlinespath+"SSFbuffers/" #select the folder as destination
try:
size=30
for TheFile in TheList: #Identify each file
TheFileName, TheFileExtension = os.path.splitext(TheFile) #Break up the file name
if (TheFileExtension==".shp"): #Identify the shapefiles
TheLines=SSFlines+TheFile
##Generate a 30m buffer around the lines
t = threading.Thread(target=TheStepBuffer.Buffer30m, args=(TheLines,TheBuffer,size))
t.start()
while (t.is_alive()):
time.sleep(2) ## sleep so that we don't execute the print statement too often
print "I'm alive!"
print "SSF buffer done"
##Calculate area of buffer
TableAreaBuff=OutputTables+TheFileName+"_Area_Buffers.dbf"
TheStepBuffer.AreaBuff(TheBuffer,TableAreaBuff)
print "SSF area buffer done"
##Calculate the area of the forest inside the buffer
TableAreaFor=OutputTables+TheFileName+"_Area_forest.dbf"
TheStepBuffer.AreaForest(TheBuffer,ForestPath,TableAreaFor,True)
print "SSF area forest done"
##Add info of the area of the buffer to the buffer layer
TheStepBuffer.GetPairInfo(TheBuffer,TableAreaBuff, "F_AREA",True)
##Add info of area of forest within the buffers to the buffer layer
TheStepBuffer.GetPairInfo(TheBuffer,TableAreaFor,["Area","Percentage"],True)
print TheFileName+"Done"
except Exception as TheError:
print "Error with the SSF forest area calculation"
print TheError
TheErrorFile.writelines(format(TheError)+"\n")
В частности, ошибка появляется, когда он получает:
TheStepBuffer.AreaForest(TheBuffer,ForestPath,TableAreaFor,True)
производит эту ошибку:
arcgisscripting.ExecuteError:
Traceback (most recent call last):
File "c:\program files (x86)\arcgis\desktop10.1\
ArcToolbox\Scripts\CalculateAreas.py", line 76, in <module>
setupCalcAreas()
File "c:\program files (x86)\arcgis\desktop10.1\ArcToolbox\Scripts\CalculateAreas.py", line 31, in setupCalcAreas
calculateAreas(inputFC, outputFC)
File "c:\program files (x86)\arcgis\desktop10.1\ArcToolbox\Scripts\CalculateAreas.py", line 55, in calculateAreas
cnt = UTILS.getCount(inputFC)
File "c:\program files (x86)\arcgis\desktop10.1\ArcToolbox\Scripts\SSUtilities.py", line 502, in getCount
return int(countObject.getOutput(0))
File "C:\Program Files (x86)\ArcGIS\Desktop10.1\arcpy\arcpy\arcobjects\arcobjects.py", line 986, in getOutput ... (truncated)
return convertArcObjectToPythonObject(self._arc_object.GetOutput(*gp_fixargs(args))) ... (truncated)
File "C:\Users\Noelia Volpe\Dropbox\Project\analisis\Python_Codes\Scripts\MovementPref\volpe_project_v2.py", line 464, in <module>
TheStepBuffer.AreaBuff(TheBuffer,TableAreaBuff)
File "C:\Users\Noelia Volpe\Dropbox\Project\analisis\Python_Codes\ReUsable\Movement_preferences.py", line 58, in AreaBuff
arcpy.CalculateAreas_stats(InputFile,OutputTable)
File "C:\Program Files (x86)\ArcGIS\Desktop10.1\arcpy\arcpy\stats.py", line 1564, in CalculateAreas
raise e
Кто-нибудь знает, что может быть источником этой ошибки? Спасибо!
Вы должны следовать [Руководству по стилю Python] (http://www.python.org/dev/peps/pep-0008/#method-names-and-instance-variables) для имен переменных - придерживаться 'lower_case_with_underscores 'not' CapWords' - это соглашение об именах используется для классов и может смутить других. –
О, извините. Так я думал в своем классе Python. Они не упоминают соглашения об именах:/Должен ли я изменить его в моем примере? Или я могу оставить его таким? – Noelia
'если программа ANOTHER запущена, а не сам Python' ... непонятно, что вы имеете в виду. процессы выполняются.python - это язык. Если вы хотите выяснить, работает ли процесс, который не является процессом «ДРУГОЙ», он должен означать, что процесс хочет знать, работает ли он сам. хорошо, это похоже на вопрос: «Я жив?» Если вы можете задать этот вопрос, вы. Мыслю, следовательно, существую. – shx2