2020from ros2cli .node .strategy import add_arguments
2121from ros2cli .node .strategy import NodeStrategy
2222from ros2node .api import get_absolute_node_name
23- from ros2node .api import get_node_names
2423from ros2node .api import NodeNameCompleter
2524from ros2node .api import parse_node_name
25+ from ros2node .api import wait_for_node
2626
2727from ros2param .api import call_get_parameters
2828from ros2param .api import call_list_parameters
@@ -50,6 +50,9 @@ def add_arguments(self, parser, cli_name): # noqa: D102
5050 parser .add_argument (
5151 '--print' , action = 'store_true' ,
5252 help = 'DEPRECATED: Does nothing.' )
53+ parser .add_argument (
54+ '--timeout' , metavar = 'N' , type = int , default = 1 ,
55+ help = 'Wait for N seconds until node becomes available (default %(default)s sec)' )
5356
5457 @staticmethod
5558 def get_parameter_values (node , node_name , params ):
@@ -74,16 +77,13 @@ def insert_dict(self, dictionary, key, value):
7477 dictionary [key ] = value
7578
7679 def main (self , * , args ): # noqa: D102
77-
78- with NodeStrategy (args ) as node :
79- node_names = get_node_names (node = node , include_hidden_nodes = args .include_hidden_nodes )
80-
8180 absolute_node_name = get_absolute_node_name (args .node_name )
82- node_name = parse_node_name ( absolute_node_name )
83- if absolute_node_name :
84- if absolute_node_name not in [ n . full_name for n in node_names ] :
81+ with NodeStrategy ( args ) as node :
82+ if not wait_for_node ( node , absolute_node_name ,
83+ args . include_hidden_nodes , args . timeout ) :
8584 return 'Node not found'
8685
86+ node_name = parse_node_name (absolute_node_name )
8787 if not os .path .isdir (args .output_dir ):
8888 raise RuntimeError (
8989 f"'{ args .output_dir } ' is not a valid directory." )
0 commit comments