How do I receive an entire string as opposed to 1 character at a time on the arduino?
The problem is that the Arduino is looping around so fast, it will execute the if (numBytesAvailable &gt; 0) line several times between each character arriving through the serial port. So as soon as a character does arrive, it grabs it, loops from zero to one, and prints a single character out.

What you should do is send an end of line character ('\n') after each command from your Python program. Then have your Arduino code buffer each character it receives and only act on the message once it receives the end-of-line character.

So if you change your Python code do send an end of line character, like so:

import serial
ser = serial.Serial('/dev/ttyACM1',9600)
ser.write("MOVE\n")


Then your Arduino code can be something like this:

// Buffer to store incoming commands from serial port
String inData;

void setup() {
    Serial.begin(9600);
    Serial.println("Waiting for Raspberry Pi to send a signal...\n");
}

void loop() {
    while (Serial.available() &gt; 0)
    {
        char recieved = Serial.read();
        inData += recieved; 

        // Process message when new line character is recieved
        if (recieved == '\n')
        {
            Serial.print("Arduino Received: ");
            Serial.print(inData);

            inData = ""; // Clear recieved buffer
        }
    }
}