Unfortunately I don't think you can get the macro names directly using VBA. Instead you scan the code module looking for Sub xxx, etc.
def run_macro(fName, path=os.getcwd()):
print(path)
fName = os.path.join(path, fName)
print(fName)
xlApp = win32com.client.Dispatch("Excel.Application")
fTest = xlApp.Workbooks.Open(fName)
for i in fTest.VBProject.VBComponents:
print i.Name
num_lines = i.CodeModule.CountOfLines
for j in range(1, num_lines+1):
if 'Sub' in i.CodeModule.Lines(j, 1) and not 'End Sub' in i.CodeModule.Lines(j, 1):
print i.CodeModule.Lines(j, 1)
xlApp.Application.Quit()
del xlApp
if __name__ == "__main__":
run_macro("Testing1.xlsm")
Note that you need to make sure you exit the script properly or you will leave Excel running (check taskmgr).