Python Brainf*ck interpreter
This looks really nice to me, I have just a few minor remarks.

Imports buried in the code

Many imports are buried in some functions,
for example in putc and getc,
and I don't see a good reason for that.
It would be better to import the required modules at the top.

Complicated command line argument parsing

The command line argument parsing in the main function looks a bit complicated. I think it should be possible to refactor that to make it easier to read, and using a context manager for the input file handling.

Mutually exclusive if statements

The second if here should be an elif:


if c == '[':
    stack.append(i)
    count += 1
if c == ']':
    jump_table[i] = stack[-1]
    jump_table[stack[-1]] = i



Don't repeat yourself

The assignment of s and i are almost identical in these two functions:


def __getitem__(self, index):
    s = self.pstack if index &gt;= 0 else self.nstack
    i = index if index &gt;= 0 else -index + 1
    # ...

def __setitem__(self, index, value):
    s = self.pstack if index &gt;= 0 else self.nstack
    i = index if index &gt;= 0 else -index - 1
    # ...



I would add some helper functions to reduce the duplication.

Too dense formatting

It would be easier to read the code with a blank line between functions.