Hello jpaton,
It can be done using progress callback argument. See an example below:
import time, Metashape
def progress_print(p):
elapsed = float(time.time() - start_time)
sec = 10E+6
if p:
sec = elapsed / p * 100
print('Current task progress: {:.2f}%, estimated time left: {:.0f} seconds'.format(p, sec))
else:
print('Current task progress: {:.2f}%, estimated time left: unknown'.format(p)) #if 0% progress
chunk = Metashape.app.document.chunk
global start_time
start_time = time.time()
chunk.matchPhotos(reset_matches = True, progress=progress_print)