Unfortunately I don't know how to do this natively in Python without vCenter, but there is the vCLI (also for Linux) with which you can send commands to the ESXi host and shut it down. But first you should shutdown your running VMs and put the host into maintenance mode.
So, one way would be to install vCLI and invoke the command "vicfg-hostops" within your Python script.
With "--server" you can specify an ESXi or vCenter hostname or IP. That's not really clear in the documentation, imho.
It might be worth adding that if the reason for there being no vCenter is because the hosts are running with the free ESXi license, then even if the API existed then it most likely wouldn't work. One of the limitations of the free ESXi license is that all the APIs like vCLI, PowerCLI only provide read-only access to the host. So you can't turn the host off that way anyway.
Thanks for the response.
I had an option for vicfg-hostops but its throwing an error,
vicfg-hostops --server=XXXXXXX --username=root --password=xxx --operation info
Hiding the command line arguments: symbol lookup error: /usr/lib64/perl5/auto/Crypt/SSLeay/SSLeay.so: undefined symbol: Perl_Gthr_key_ptr
OS - RHEL7.3
and it has been a nightmare to solve above issue after trying all the solutions. That's why i was looking for similar toolkit in python (Not involving vCLI or vCenter).