7 from subprocess
import PIPE
17 rospy.signal_shutdown(
"finish")
24 if req.message_type ==
"LAUNCH":
25 proc = subprocess.Popen(req.command, shell=
True, restore_signals=
True, stdout=PIPE, stderr=PIPE)
27 res = proc.communicate(timeout=0.1)
28 except subprocess.TimeoutExpired:
29 return GStreamerLauncherResponse(
True, proc.pid)
31 return GStreamerLauncherResponse(
False, -1)
32 elif req.message_type ==
"EXIT":
34 os.killpg(os.getpgid(req.pid), signal.SIGTERM)
35 except ProcessLookupError:
36 return GStreamerLauncherResponse(
False, -1)
38 return GStreamerLauncherResponse(
True, 0)
39 elif req.message_type ==
"SYSTEM_EXIT":
41 exiting_thread = threading.Thread(target=exiting)
42 exiting_thread.start()
43 return GStreamerLauncherResponse(
True, 0)
45 return GStreamerLauncherResponse(
False, -1)
49 s = rospy.Service(
'gst_launch', GStreamerLauncher, launcher)
62 if not exiting_thread
is None:
66 if __name__ ==
"__main__":
67 rospy.init_node(
'gstreamer_launcher', log_level=rospy.INFO)
68 signal.signal(signal.SIGTERM, sigterm_handler)
69 signal.signal(signal.SIGINT, sigterm_handler)
def sigterm_handler(signal, frame)