platformio/platformio-core

pio monitor fails when stdin is a pipe

Open

#5113 opened on Mar 19, 2025

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Python (7,329 stars) (791 forks)batch import
device managementhelp wanted

Description

When I call pio like this echo "" | pio run -t monitor, it fails with "Inappropriate ioctl for device":

Processing htit-wb32la (platform: espressif32; framework: arduino; board: heltec_wifi_lora_32)
--------------------------------------------------------------------------------------------
error: Traceback (most recent call last):
File "/usr/lib/python3.13/site-packages/platformio/__main__.py", line 103, in main
  cli()  # pylint: disable=no-value-for-parameter
  ~~~^^
File "/usr/lib/python3.13/site-packages/click/core.py", line 1157, in __call__
  return self.main(*args, **kwargs)
         ~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/site-packages/click/core.py", line 1078, in main
  rv = self.invoke(ctx)
File "/usr/lib/python3.13/site-packages/platformio/cli.py", line 85, in invoke
  return super().invoke(ctx)
         ~~~~~~~~~~~~~~^^^^^
File "/usr/lib/python3.13/site-packages/click/core.py", line 1688, in invoke
  return _process_result(sub_ctx.command.invoke(sub_ctx))
                         ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/usr/lib/python3.13/site-packages/click/core.py", line 1434, in invoke
  return ctx.invoke(self.callback, **ctx.params)
         ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/site-packages/click/core.py", line 783, in invoke
  return __callback(*args, **kwargs)
File "/usr/lib/python3.13/site-packages/click/decorators.py", line 33, in new_func
  return f(get_current_context(), *args, **kwargs)
File "/usr/lib/python3.13/site-packages/platformio/run/cli.py", line 147, in cli
  process_env(
  ~~~~~~~~~~~^
      ctx,
      ^^^^
  ...<9 lines>...
      verbose,
      ^^^^^^^^
  )
  ^
File "/usr/lib/python3.13/site-packages/platformio/run/cli.py", line 213, in process_env
  ctx.invoke(
  ~~~~~~~~~~^
      device_monitor_cmd,
      ^^^^^^^^^^^^^^^^^^^
      port=monitor_port,
      ^^^^^^^^^^^^^^^^^^
      environment=name,
      ^^^^^^^^^^^^^^^^^
  )
  ^
File "/usr/lib/python3.13/site-packages/click/core.py", line 783, in invoke
  return __callback(*args, **kwargs)
File "/usr/lib/python3.13/site-packages/platformio/device/monitor/command.py", line 154, in device_monitor_cmd
  start_terminal(options)
  ~~~~~~~~~~~~~~^^^^^^^^^
File "/usr/lib/python3.13/site-packages/platformio/device/monitor/terminal.py", line 54, in start_terminal
  term = new_terminal(options)
File "/usr/lib/python3.13/site-packages/platformio/device/monitor/terminal.py", line 102, in new_terminal
  term = Terminal(
      new_serial_instance(options),
  ...<2 lines>...
      filters=list(reversed(options["filters"] or ["default"])),
  )
File "/usr/lib/python3.13/site-packages/platformio/device/monitor/terminal.py", line 28, in __init__
  super().__init__(*args, **kwargs)
  ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/site-packages/serial/tools/miniterm.py", line 395, in __init__
  self.console = Console()
                 ~~~~~~~^^
File "/usr/lib/python3.13/site-packages/serial/tools/miniterm.py", line 198, in __init__
  self.old = termios.tcgetattr(self.fd)
             ~~~~~~~~~~~~~~~~~^^^^^^^^^
termios.error: (25, 'Inappropriate ioctl for device')

============================================================

An unexpected error occurred. Further steps:

* Verify that you have the latest version of PlatformIO using
`python -m pip install -U platformio` command

* Try to find answer in FAQ Troubleshooting section
https://docs.platformio.org/page/faq/index.html

* Report this problem to the developers
https://github.com/platformio/platformio-core/issues

============================================================

pio core version is 6.1.17 as packaged for arch.

My use case for this is that I am trying to automate some hardware tests that require two way communication between the host system and the device.

Contributor guide