pythonaudioamixer

Exit from an if [Python]


I can't exit from this if construct

#!/usr/bin/python2.7
import os
import re
import time
global state


#print status_on.group()
def main():
    get_current_jack_status = """amixer -c1 contents | grep -A 2 'Headphone Jack'"""
    output = os.popen(get_current_jack_status).read()
    status_on = re.search('values=on', output)
    if status_on:
        state = status_on
        os.system("notify-send 'Audio Manager' 'An audio jack was plugged in' -i audacity.png")
        if status_on == state:
            print "True"
            state = 1   #here i can't exit

        if status_on != state:
            print state
            os.system("notify-send 'Audio Manager' 'An audio jack was unplugged' -i audacity.png")


while True:
    main()

I've tried pass but when I execute the script it says as output:

True
1
True
1

ecc. If I use "break" it crashes.


Solution

  • This should work. Move your global declaration to inside the main function, then this should initialize the status, and then check for status changes. This can probably be cleaned up a bit (namely the if statement), but it should work.

    #!/usr/bin/python2.7
    import os
    import sys
    import re
    import time
    
    
    #print status_on.group()
    def main():
        global state
        get_current_jack_status = """amixer -c1 contents | grep -A 2 'Headphone Jack'"""
        output = os.popen(get_current_jack_status).read()
        status_on = re.search('values=on', output)
        if (status_on is None and state) or (state is None and status_on):
            state = status_on
            if status_on:
                print "a jack was plugged in"
                os.system("notify-send 'Audio Manager' 'An audio jack was plugged in' -i audacity.png")
            else:
                print "a jack was unplugged"
                os.system("notify-send 'Audio Manager' 'An audio jack was unplugged' -i audacity.png")
    
    get_current_jack_status = """amixer -c1 contents | grep -A 2 'Headphone Jack'"""
    output = os.popen(get_current_jack_status).read()
    state = re.search('values=on', output)
    
    while True:
            main()