<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Reading automata output from processes
If an argument of spot.automata ends with |, then it is interpreted as a shell command that outputs one automaton or more.
Step1:  A single automaton can be read using spot.automaton(), with the same convention.
Step2:  Error handling
If the shell command terminates with a non-zero exit status, we should get an exception.
Step3:  Reading an empty file with spot.automaton() is an error.
<ASSISTANT_TASK:>
Python Code:
for a in spot.automata('ltl2tgba -s "a U b"; ltl2tgba --lbtt "b"|', 'ltl2tgba -H "GFa" "a & GFb"|'):
    display(a)
Explanation: Reading automata output from processes
If an argument of spot.automata ends with |, then it is interpreted as a shell command that outputs one automaton or more.
End of explanation
spot.automaton('ltl2tgba -s6 "a U b"|')
Explanation: A single automaton can be read using spot.automaton(), with the same convention.
End of explanation
spot.automaton('non-existing-command|')
for a in spot.automata("ltl2tgba 'a U b'|", 'ltl2tgba "syntax U U error"|'):
    display(a)
Explanation: Error handling
If the shell command terminates with a non-zero exit status, we should get an exception.
End of explanation
spot.automaton('true|')
Explanation: Reading an empty file with spot.automaton() is an error.
End of explanation
<END_TASK>