预定义的Python函数无法运行,如果名称=主

问题描述:

我是一名初学者程序员,我的目标是设计一个实用程序,可以接受短信命令并远程在我的主机上运行相应的功能。我正在使用各种工具(IFTTT,Dropbox,Twilio,Task Scheduler),但我一直在遇到一些麻烦。预定义的Python函数无法运行,如果名称=主

最近我尝试了通过一个我已经命名为'main()'的函数来运行主代码。然而,当我试图调用函数,命令行抛出一个错误:

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

我会在这里发布我的代码的情况下(一些信息编辑出于安全考虑):

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

'''  

任何帮助将非常感谢。请记住,我没有接受过CS的正式教育,但在今年秋天开始CS大学之前,我只是试图弄湿自己的脚。我只编程了大约3个月。

此外,如果此代码中的任何内容都可以做得更加优雅,我会很乐意接受建议。

-Jake

+3

删除'def logmein():'。你为什么这样做?然后dedent'main',因此它在全球范围内。 –

+1

你的main()函数是在logmein()内定义的,因此超出了主脚本的范围 – jeremycg

从里面取出logmein()所以main()其在全球范围内。你得到的错误是因为当你从全局范围调用main时,它没有被定义。

+0

非常感谢。我开始编写logmein函数以便稍后完成它,但我没有意识到它会导致下一行被包含在该函数中。这可以解释我之前为什么会收到缩进错误。我评论说,该行和程序现在运行良好。谢谢一堆! –