Search code examples
pythonapplescriptosascript

Pass variable into AppleScript from python


Can someone show me how to pass a variable into an Applescript using osascript in python? I've seen some documentation/samples on doing this but I'm not understanding it at all.

Here is my python code:

# I want to pass this value into my apple script below
myPythonVariable = 10

cmd = """
    osascript -e '
    tell application "System Events"
        set activeApp to name of first application process whose frontmost is true
        if "MyApp" is in activeApp then
            set stepCount to myPythonVariableIPassIn

            repeat with i from 1 to stepCount
                DoStuff...
            end repeat
        end if
    end tell
    '
    """
os.system(cmd)

Solution

  • String concatenation with the + operator

    myPythonVariable = 10
    cmd = """
        osascript -e '
        tell application "System Events"
            set activeApp to name of first application process whose frontmost is true
            if "MyApp" is in activeApp then
                set stepCount to """ + str(myPythonVariable) + """
    
                repeat with i from 1 to stepCount
                    -- do something
                end repeat
            end if
        end tell
        '
        """
    

    Or, string formatting with the {} :

    myPythonVariable = 10
    cmd = """
        osascript -e '
        tell application "System Events"
            set activeApp to name of first application process whose frontmost is true
            if "MyApp" is in activeApp then
                set stepCount to {0}
    
                repeat with i from 1 to stepCount
                    -- do something
                end repeat
            end if
        end tell
        '
        """.format(myPythonVariable)
    

    {0} is the place-holder for the first variable, {1} is the place-holder for the second variable, ....

    For multiple variables:

    .format(myPythonVariable, var2, var3)


    Or, string formatting with the %s operator

    myPythonVariable = 10
    cmd = """
        osascript -e '
        tell application "System Events"
            set activeApp to name of first application process whose frontmost is true
            if "MyApp" is in activeApp then
                set stepCount to %s
    
                repeat with i from 1 to stepCount
                    -- do something
                end repeat
            end if
        end tell
        '
        """ % myPythonVariable
    

    For multiple variables:

    % (myPythonVariable, var2, var3)