Skip to content

'Inappropriate ioctl for device' when using run() in a headless process #425

@txomon

Description

@txomon

Hello, I have no idea what happened in the last release, but invoke 0.14.0 is breaking a setup for me when I run invoke remove_reference from a git commit-msg hook. I don't know if this gives any clue.

I will post back whenever I come up with a way to properly reproduce.

@task                                                                                                                                                                                                                
def remove_reference(ctx):                                                                                                                                                                                                    
    """Remove references"""                                                                                                                                                                
    ctx.run('rm -rf docs/reference/')                                                                                                                                                                                
  File "/home/javier/projects/test/bin/invoke", line 11, in <module>
    sys.exit(program.run())
  File "/home/javier/projects/test/lib/python3.6/site-packages/invoke/program.py", line 274, in run
    self.execute()
  File "/home/javier/projects/test/lib/python3.6/site-packages/invoke/program.py", line 389, in execute
    executor.execute(*self.tasks)
  File "/home/javier/projects/test/lib/python3.6/site-packages/invoke/executor.py", line 113, in execute
    result = call.task(*args, **call.kwargs)
  File "/home/javier/projects/test/lib/python3.6/site-packages/invoke/tasks.py", line 111, in __call__
    result = self.body(*args, **kwargs)
  File "/home/javier/projects/ridee/jinn-api/tasks.py", line 16, in remove_reference
    ctx.run('rm -rf docs/reference/')
  File "/home/javier/projects/test/lib/python3.6/site-packages/invoke/context.py", line 60, in run
    return runner_class(context=self).run(command, **kwargs)
  File "/home/javier/projects/test/lib/python3.6/site-packages/invoke/runners.py", line 256, in run
    return self._run_body(command, **kwargs)
  File "/home/javier/projects/test/lib/python3.6/site-packages/invoke/runners.py", line 358, in _run_body
    raise ThreadException(thread_exceptions)
invoke.exceptions.ThreadException:
Saw 1 exceptions within threads (OSError):


Thread args: {'kwargs': {'echo': None,
            'input_': <_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>,
            'output': <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>},
 'target': <bound method Runner.handle_stdin of <invoke.runners.Local object at 0x7ff17286cc88>>}

Traceback (most recent call last):

  File "/home/javier/projects/test/lib/python3.6/site-packages/invoke/util.py", line 125, in run
    super(ExceptionHandlingThread, self).run()

  File "/usr/lib64/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)

  File "/home/javier/projects/test/lib/python3.6/site-packages/invoke/runners.py", line 621, in handle_stdin
    data = self.read_our_stdin(input_)

  File "/home/javier/projects/test/lib/python3.6/site-packages/invoke/runners.py", line 583, in read_our_stdin
    bytes_ = input_.read(bytes_to_read(input_))

  File "/home/javier/projects/test/lib/python3.6/site-packages/invoke/platform.py", line 162, in bytes_to_read
    return struct.unpack('h', fcntl.ioctl(input_, termios.FIONREAD, "  "))[0]

OSError: [Errno 25] Inappropriate ioctl for device

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions