Linked list in Python
A better main

Instead of just calling main() at the bottom, wrap it in if __name__ == "__main__":. In otherwords:

if __name__ == "__main__":
    main()


This allows me to re-use your module better, see the answer I linked for more details.

if chains

This portion of code:

        if command == "get_first":
            print(list.get_first())
        elif command == "get_last":
            print(list.get_last())
        elif command == "add_first":
            list.add_first(command_tokens[1])
        elif command == "add_last":
            list.add_last(command_tokens[1])
        elif command == "remove_first":
            list.remove_first()
        elif command == "remove_last":
            list.remove_last()
        elif command == "print":
            print(list)


Is a code smell to me. I would refactor this with a dictionary:

commands = {
    "get_first": lambda: print(list.get_first()),
    "get_last": lambda: prrint(list.get_last()),
    ...
}


This can then be called with:

commands[command]()


Library Shadowing

list = LinkedList()


list is already part of the standard library. I would not over shadow the name. I would change the name to something like linked for instance.

namedtuple?

It is questionable whether you want to do this or not, but the class LinkedListNode is just an __init__ method. In this case, I would usually advocate using a namedtuple instead and using the defaults parameter added in Python 3.7 if applicable. Although, then again, defaults is only in 3.7... So, maybe not applicable. Still useful to know about.

Implement __str__ how you implemented __repr__

__str__ is for human-readable output. __repr__ is for more internal information. You have implemented __repr__ to display a human readable representation of your list. Switch to __str__ instead.