From 0b28b1e57f74002a6569147c9d38e973390ac91c Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Tue, 23 Sep 2025 06:40:40 +0200 Subject: [PATCH] Fix ros2 topic pub --stdin Running the following command currently fails: ros2 topic pub --stdin /test std_msgs/Bool <<< "{data: true}" The error is: Traceback (most recent call last): File "/python3.12-ros-jazzy-ros2cli-0.32.6-r1/bin/ros2", line 34, in sys.exit(load_entry_point('ros2cli==0.32.6', 'console_scripts', 'ros2')()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/ros-env/lib/python3.12/site-packages/ros2cli/cli.py", line 91, in main rc = extension.main(parser=parser, args=args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/ros-env/lib/python3.12/site-packages/ros2topic/command/topic.py", line 41, in main return extension.main(args=args) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/ros-env/lib/python3.12/site-packages/ros2topic/verb/pub.py", line 117, in main return main(args) ^^^^^^^^^^ File "/ros-env/lib/python3.12/site-packages/ros2topic/verb/pub.py", line 138, in main return publisher( ^^^^^^^^^^ File "/ros-env/lib/python3.12/site-packages/ros2topic/verb/pub.py", line 174, in publisher if '^J' in values: ^^^^^^^^^^^^^^ TypeError: a bytes-like object is required, not 'str' We fix it by decoding stdin to utf8 string to match the type of values passed via a command line argument. Signed-off-by: Michal Sojka --- ros2topic/ros2topic/verb/pub.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2topic/ros2topic/verb/pub.py b/ros2topic/ros2topic/verb/pub.py index 9732ab1ee..0a3b0c1f1 100644 --- a/ros2topic/ros2topic/verb/pub.py +++ b/ros2topic/ros2topic/verb/pub.py @@ -138,7 +138,7 @@ def main(args): times = 1 if args.stdin: - values = collect_stdin() + values = collect_stdin().decode() else: values = args.values