intermittent ValueErrors from subprocess

Chris Angelico rosuav at gmail.com
Sun May 15 18:08:09 EDT 2016


On Mon, May 16, 2016 at 1:49 AM, Pavlos Parissis
<pavlos.parissis at gmail.com> wrote:
> I use subprocess.check_output like this:
>
> cmd = [
>     '/sbin/ip',
>     'address',
>     'show',
>     'dev',
>     "{}".format(self.config['interface']),
>     'to',
>     "{}".format(self.config['ip_prefix']),
> ]

Unrelated to your problem: "{}".format(x) is the same as str(x), and
if x is already a string, it does exactly nothing. Most likely you can
just put your configs straight in there.

> try:
>     out = subprocess.check_output(
>         cmd,
>         universal_newlines=True,
>         timeout=1)
> except subprocess.CalledProcessError as error:
>     return True
> except subprocess.TimeoutExpired:
>     return True
> else:
>     if self.config['ip_prefix'] in out:
>         return True
>     else:
>         return False
>
>
> and I get the following exception:
>
> ValueError: Invalid file object: <_io.TextIOWrapper name=11
> encoding='UTF-8'>

Searching the CPython sources for that exception shows one hit:
selectors.py, where it converts a file object to an integer file
descriptor. (You could have helped out by showing us the full
traceback.) Is it possible you were running out of file descriptors,
or in some other way unable to create the pipe?

ChrisA



More information about the Python-list mailing list