Mijn vraag
Ik heb een Python script dat een command uitvoert m.b.v. subprocess.run(). Deze command heeft een uitkomst, maar die wordt niet meteen "gemaakt". Er is een onbekende tijd tussen waneer er een reactie/uitkomt is. Wat ik nu wil, is dat er na het uitvoeren van het commando, telkens gecheckt wordt of er al een reactie is. Als dit het geval is, dan wil ik deze reactie controleren om te kijken of er een specifieke string in zit. Als deze string aanwezig is, dan wil ik het subprocess sluiten en een andere normale Python functie uitvoeren.
Relevante software en hardware die ik gebruik
Python3 op Ubuntu 16.04 met eric6 Python IDE
Wat ik al gevonden of geprobeerd heb
Ik heb al gekeken naar subprocess.check_output(), of de uitkomst van het command decoden om vervolgens de string eruit te halen. Echter loop ik (volgens mij) telkens vast op het feit dat er geen onmiddelijke reactie is op het command.
Aanvullende informatie
Dit is het script wat ik nu heb. Hiermee krijg ik al wel de gewenste output op mijn scherm. Echter lukt het me niet om de gewenste vervolgstappen te halen.
De output van het command is na X seconden (nogmaals, deze periode is onbekend en kan variëren van 3 seconden tot enkele minuten):
Nu wil ik in mijn code dus controleren of de string "Goal reached" aanwezig is in de output. Zo ja, dan wil ik uit de hele next_step() functie stappen (en alles wat hierin staat sluiten) en doorgaan naar de next_step() functie.
Hopelijk heb ik genoeg informatie gegeven en is er iemand die mij kan helpen
Ik heb een Python script dat een command uitvoert m.b.v. subprocess.run(). Deze command heeft een uitkomst, maar die wordt niet meteen "gemaakt". Er is een onbekende tijd tussen waneer er een reactie/uitkomt is. Wat ik nu wil, is dat er na het uitvoeren van het commando, telkens gecheckt wordt of er al een reactie is. Als dit het geval is, dan wil ik deze reactie controleren om te kijken of er een specifieke string in zit. Als deze string aanwezig is, dan wil ik het subprocess sluiten en een andere normale Python functie uitvoeren.
Relevante software en hardware die ik gebruik
Python3 op Ubuntu 16.04 met eric6 Python IDE
Wat ik al gevonden of geprobeerd heb
Ik heb al gekeken naar subprocess.check_output(), of de uitkomst van het command decoden om vervolgens de string eruit te halen. Echter loop ik (volgens mij) telkens vast op het feit dat er geen onmiddelijke reactie is op het command.
Aanvullende informatie
Dit is het script wat ik nu heb. Hiermee krijg ik al wel de gewenste output op mijn scherm. Echter lukt het me niet om de gewenste vervolgstappen te halen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| import subprocess import sys def next_step(): print("Navigation goal reached!") def check_status(): command = "rostopic echo move_base/result/status/text" task = subprocess.run(command, shell=True, stderr=subprocess.PIPE) while(True): out = task.stderr.read(1) if out == '' and task.poll() != None: break elif out != '': sys.stdout.write(out) sys.stdout.flush() if __name__ == "__main__": check_status() |
De output van het command is na X seconden (nogmaals, deze periode is onbekend en kan variëren van 3 seconden tot enkele minuten):
code:
1
2
| "Goal reached." --- |
Nu wil ik in mijn code dus controleren of de string "Goal reached" aanwezig is in de output. Zo ja, dan wil ik uit de hele next_step() functie stappen (en alles wat hierin staat sluiten) en doorgaan naar de next_step() functie.
Hopelijk heb ik genoeg informatie gegeven en is er iemand die mij kan helpen