2017-07-16 1 views
0

Ich bin ein Anfänger Programmierer und mein Ziel ist es, ein Dienstprogramm, das eine SMS-Befehl akzeptieren und eine entsprechende Funktion auf meinem Haupt-PC aus der Ferne ausführen können. Ich benutze eine Vielzahl von Tools, um dies zu tun (IFTTT, Dropbox, Twilio, Taskplaner), aber ich habe auf dem Weg in ein paar Schwierigkeiten gerannt.vordefinierte Python-Funktion fehlgeschlagen mit If Name = Main

Zuletzt habe ich versucht, den Hauptcode über eine Funktion auszuführen, die ich 'main()' genannt habe. Allerdings, wenn ich versuchen, die Funktion aufzurufen, wirft Befehlszeile einen Fehler:

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

ich meinen Code hier für Kontext wird Post (einige Informationen zur Sicherheit bearbeitet):

#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. 

'''  

Jede mögliche Hilfe enorm geschätzt werden. Denken Sie daran, ich habe keine formale Ausbildung in CS, aber ich versuche nur, meine Füße nass zu machen, bevor ich einen CS-Major in diesem Herbst anfange. Ich programmiere erst seit ca. 3 Monaten.

auch, wenn etwas in diesem Code kann eleganter getan werden, werde ich gerne beraten.

-Jake

+3

Entfernen 'def logmein():'. Warum hast du das? Dann dedent 'main' also ist es im globalen Bereich. –

+1

Ihre main() - Funktion ist innerhalb von logmein() definiert und somit außerhalb des Gültigkeitsbereichs des Hauptskriptes – jeremycg

Antwort

0

entfernen main() von innen logmein() seine so im globalen Bereich. Der Fehler, den Sie erhalten, liegt darin, dass wenn Sie main vom globalen Gültigkeitsbereich aufrufen, dieser nicht definiert ist.

+0

Vielen Dank. Ich fing an, die logmein-Funktion zu schreiben, mit der Absicht, sie später zu beenden, aber ich wusste nicht, dass dies dazu führen würde, dass die nächste Zeile in dieser Funktion enthalten wäre. Das würde erklären, warum ich früher einen Einzugfehler bekommen habe. Ich habe diese Zeile auskommentiert und das Programm läuft jetzt gut. Vielen Dank! –

Verwandte Themen