'Run the command, with the given arguments.  The ``script``
argument can have space-separated arguments, or you can use
the positional arguments.
Keywords allowed are:
``expect_error``: (default False)
Don\'t raise an exception in case of errors
``expect_stderr``: (default ``expect_error``)
Don\'t raise an exception if anything is printed to stderr
``stdin``: (default ``""``)
Input to the script
``printresult``: (default True)
Print the result after running
``cwd``: (default ``self.cwd``)
The working directory to run in
Returns a `ProcResponse
<class-paste.fixture.ProcResponse.html>`_ object.'

def run(self, script, *args, **kw):

    __tracebackhide__ = True
    expect_error = _popget(kw, 'expect_error', False)
    expect_stderr = _popget(kw, 'expect_stderr', expect_error)
    cwd = _popget(kw, 'cwd', self.cwd)
    stdin = _popget(kw, 'stdin', None)
    printresult = _popget(kw, 'printresult', True)
    args = map(str, args)
    assert (not kw), ('Arguments    not    expected:    %s' % ',    '.join(kw.keys()))
    if ('    ' in script):
        assert (not args), ('You    cannot    give    a    multi-argument    script    (%r)    and    arguments    (%s)' % (script, args))
        (script, args) = script.split(None, 1)
        args = shlex.split(args)
    script = self._find_exe(script)
    all = ([script] + args)
    files_before = self._find_files()
    proc = subprocess.Popen(all, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE, cwd=cwd, env=self.environ)
    (stdout, stderr) = proc.communicate(stdin)
    files_after = self._find_files()
    result = ProcResult(self, all, stdin, stdout, stderr, returncode=proc.returncode, files_before=files_before, files_after=files_after)
    if printresult:
        print(result)
        print(('-' * 40))
    if (not expect_error):
        result.assert_no_error()
    if (not expect_stderr):
        result.assert_no_stderr()
    return result
