Before worrying about how to do one particular construct, it's always best to start with the requirements: a clear concise statement of just what you are trying to accomplish. Then, when you clearly know WHAT you want to do, you can start to figure out HOW to best do it.
From the Python code, it looks like you are trying to capture events from some sort of keyboard/throttle/joystick flight simulator interface. As such, I'm pretty sure you want to keep receiving events from the Python code and not stop after just one. Once you have the event into the Arduino code, then you will do something useful with it, but for now you will just print it out to the serial port so that you can verify that you are getting the codes - a wise first step.
Does that sound about right? If so, you will need to organize the code a little differently. Besides my initial comments, the other issue with the code is that you start the process, wait for one character back, read one data item (which will probably not be set yet) then exit. As is, you won't get multiple events, if any. And if what you have is inside loop() then you will be starting the Python script through every iteration, which is not what you want since the Python has it's own infinite loop to keep processing multiple events. And, as previously mentioned Bridge.put/get is not a good communications method for this task, since you don't know when a new value is set, only that it changed (you won't be able to detect the same event twice(or more) in a row.)
So it's clear to me that you want to start the script in setup() and keep looking for events in loop(). This means that your Process object p needs to be declared at a global level, outside of and before setup() and loop() so that both functions can access the same object. Then, in setup() you need to do the initial begin, parameter, and runAsynchronously calls. (Angelo9999 has it exactly right - because the Python has an infinite loop, it will never terminate, so p.run() will never return. You MUST call it a synchronously.)
With the process started in setup(), then in loop() you will want to check for available characters. When a character is ready, read it and add it to a character array buffer. When a complete event string is received, then decode the event and act on it.
I would start with baby steps:
- Start with the original Python code, without the Bridge calls
- Manually run the script from the command line and make sure it gives good data. Don't bother doing ANYTHING with the Arduino side until this part works - nothing you do in the Arduino code will fix the Python script if it doesn't work. It would be helpful for future steps if you post the output of the Python script while you are creating some of the events you want to process, this will make it easier to figure out how to parse the data and identify the beginning/end of an event string. This step lets you know the Python is working, and shows you the data you need to process.
- Once it's working at the command line, move to the Arduino code. Start the process in setup() and in loop() just check for a character available and if so read it and simply write it the serial port. Run it and generate more events. The goal is that the serial output should look identical to the output from when you ran the script on the command line. This step shows that you can properly transfer the data to the Arduino code.
- Now that you know that you can get the data into the Arduino code, and what it looks like, add the code to buffer the incoming characters and detect the end of the event string. When you get a complete string, print it to the serial port. Run it and generate events, making sure they are printed properly. This step shows you can properly buffer and recognize complete events.
- With all of that working, you can finally add the code to recognize and act on the desired events.
There are a lot of things that all have to interact together to make this work. If you try to do it all at once, there will likely be a problem somewhere, and it'll be hard to tell just where. By doing it one step at a time, and only adding one feature at a time, you break it up into a set of small steps. If something goes wrong at one of the steps, it's much easier to figure out what it is.
Good luck, and let us know what the output from Python looks like, and we can probably give some tips on how to parse it.