Search code examples
pythonfunctioncmddropboxifttt

predefined python function failing to run with if name = main


I'm a beginner programmer and my goal is to design a utility that can accept an sms command and run a corresponding function on my main pc remotely. I'm using a variety of tools to do this (IFTTT, Dropbox, Twilio, Task Scheduler), but I've run into a little trouble along the way.

Most recently I've tried running the main code through a function which I've named 'main()'. However, when I attempt to call the function, command line throws an error:

Traceback (most recent call last):
File "C:\Python_Files\WIP\Check.py", line 104, in <module>
    main()
NameError: name 'main' is not defined

I will post my code here for context (some info is edited for security):

#DESCRIPTION:
#Check if C:/Users/Thermaltake/Dropbox/Remote_Control contains a .txt file
#set count to corresponding integer
#delete file
#call function of corresponding integer
#reset count
#Set Task Scheduler to run this program every 5 minutes when idle.

import os
import time
import subprocess
import sys
import collections
import webbrowser
import logging
from twilio.rest import Client

#Twilio Account Info
account_sid = 'id'#not included for security
auth_token = 'token'#not included for security

client = Client(account_sid, auth_token)
myTwilioNumber = '+myTwilioNumber'#not included for security
myCellPhone = '+MyCellPhone'#not included for security



##FUNCTIONS##



#shutdown command
def shutdown():
    os.system('shutdown -s')

#restart command
def restart():
    os.system('shutdown -r')

#wake up computer and launch core programs
def wakeup():
    subprocess.Popen('C:/Users/Thermaltake/AppData/Roaming/Spotify/Spotify.exe')
    webbrowser.open('https://us-mg6.mail.yahoo.com/neo/launch')
    webbrowser.open('https://www.rescuetime.com/dashboard')

#Launch main coding applications
def code():
    webbrowser.open('http://somafm.com/player/#/now-playing/groovesalad')   
    subprocess.Popen('C:\Windows\system32\cmd.exe')
    subproces.Popen('C:\Python_Files\Sublime Text 3\sublime_text.exe')

#Launch Remote Desktop and automatically log in
def logmein():




    def main(): #main code
        x=0 #counter

        #checks for txt file in Remote_Control folder and assigns value to x
        if os.path.isfile('C:/Users/Thermaltake/Dropbox/Remote_Control/shutdown.txt')==True:
            x=1
        elif os.path.isfile('C:/Users/Thermaltake/Dropbox/Remote_Control/wakeup.txt')==True:
            x=2
        elif os.path.isfile('C:/Users/Thermaltake/Dropbox/Remote_Control/restart.txt')==True:
            x=3
        elif os.path.isfile('C:/Users/Thermaltake/Dropbox/Remote_Control/code.txt')==True:
            x=4
        else:
            print('No File Found')

        #Checks x value and executes function
        if x==1:
            os.remove('C:/Users/Thermaltake/Dropbox/Remote_Control/shutdown.txt') 
            shutdown()
            #print('Shutdown')#Placeholder for testing
            message = client.messages.create(body='Shutdown Initiated', from_=, to=)#not included for security
        elif x==2:
            os.remove('C:/Users/Thermaltake/Dropbox/Remote_Control/wakeup.txt')
            wakeup()
            #print ('Spotify') #Placeholder.  Define function to wake up PC and launch core programs
            message = client.messages.create(body='Waking Up', from_=, to=)#not included for security
        elif x==3:
            os.remove('C:/Users/Thermaltake/Dropbox/Remote_Control/restart.txt')
            restart()
            #print ('Restart') #Placeholder.
            message = client.messages.create(body='Restart Initiated', from_=, to=)#not included for security
        elif x==4:
            os.remove('C:/Users/Thermaltake/Dropbox/Remote_Control/code.txt')
            code()
            print('Happy Coding!')
            message = client.messages.create(body='Ready to Code!', from_=, to=)#not included for security
        else:
            print ('No command entered') 

        #End Sequence (prints value and resets counter)
        print (x)
        x=0

        os.system('pause') #Placeholder for testing

if __name__ == '__main__': #Runs main function
    main()

'''
TODO:
Twilio not yet working.  try different iterations of body and message.  try assigning it to its own function

subprocess failing to launch programs.  research alternatives.  SMTP is a possibility.

possibly need to add Enter keystroke to the end of shutdown() and restart().  maybe even log in to log off.

add 'send to-do list to phone' function.

cleanup indentation and remove unnecessary modules

add 'flvto' function

add 'remote in' function.


+ Version 1.1 7/6/17 +

WORKING:
subprocess.Popen('C:\Windows\system32\cmd.exe') 
webbrowser.open('http://somafm.com/player/#/now-playing/groovesalad') 
os.remove 
wakeup()

NOT WORKING:
subproces.Popen('C:\Python_Files\Sublime Text 3\sublime_text.exe')
Twilio return message
Task Scheduler: "Check_Dropbox on Lock"

BUGS:
IFTTT is buggy and sometimes unresponsive
Task Scheduler to check file is too slow.  Need something faster. (Possibly 'Watch 4 Folder')
shutdown() waits til logon to initialize.
restart() waits til logon to initialize.

'''    

Any help would be enormously appreciated. Keep in mind I have no formal education in CS, but I'm just trying to get my feet wet before starting a CS major this fall. I've only been programming for about 3 months.

also, if anything in this code can be done more elegantly, I will happily take advice.

-Jake


Solution

  • remove main() from inside logmein() so its in the global scope. The error you are getting is because when you call main from the global scope it isn't defined.