Skip to content

pio monitor fails when stdin is a pipe #5113

Open
@Raupinger

Description

@Raupinger

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

full command output
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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions