|
12 | 12 | # See the License for the specific language governing permissions and |
13 | 13 | # limitations under the License. |
14 | 14 |
|
| 15 | +import platform |
| 16 | +import signal |
15 | 17 | import uuid |
16 | 18 |
|
17 | 19 | from ros2cli.node.direct import DirectNode |
@@ -39,13 +41,21 @@ def main(self, *, args): |
39 | 41 | container = run_standalone_container(container_node_name=args.container_node_name) |
40 | 42 |
|
41 | 43 | with DirectNode(args) as node: |
42 | | - load_component_into_container( |
43 | | - node=node, remote_container_node_name=args.container_node_name, |
44 | | - package_name=args.package_name, plugin_name=args.plugin_name, |
45 | | - node_name=args.node_name, node_namespace=args.node_namespace, |
46 | | - log_level=args.log_level, remap_rules=args.remap_rules, |
47 | | - parameters=args.parameters, extra_arguments=args.extra_arguments |
48 | | - ) |
| 44 | + try: |
| 45 | + load_component_into_container( |
| 46 | + node=node, remote_container_node_name=args.container_node_name, |
| 47 | + package_name=args.package_name, plugin_name=args.plugin_name, |
| 48 | + node_name=args.node_name, node_namespace=args.node_namespace, |
| 49 | + log_level=args.log_level, remap_rules=args.remap_rules, |
| 50 | + parameters=args.parameters, extra_arguments=args.extra_arguments |
| 51 | + ) |
| 52 | + except RuntimeError as ex: |
| 53 | + # In case the component fails to load, kill the container. |
| 54 | + print('{}, interrupting container node'.format(ex)) |
| 55 | + if platform.system() == 'Windows': |
| 56 | + container.send_signal(signal.CTRL_C_EVENT) |
| 57 | + else: |
| 58 | + container.send_signal(signal.SIGINT) |
49 | 59 |
|
50 | 60 | while container.returncode is None: |
51 | 61 | try: |
|
0 commit comments