<html devsite>
<head>
  <meta name="project_path" value="/_project.yaml">
  <meta name="book_path" value="/versions/6.4.0/_book.yaml">
</head>
<body>

<h1 class="page-title" id="modules.exec_result">exec_result</h1>

<!-- {% raw %} -->

A structure storing result of repository_ctx.execute() method. It contains the standard output stream content, the standard error stream content and the execution return code.

<h2>Members</h2>
<ul>
    <li>
    <a href="#return_code">return_code</a>
  </li>
      <li>
    <a href="#stderr">stderr</a>
  </li>
      <li>
    <a href="#stdout">stdout</a>
  </li>
  </ul>

      <h2 id="return_code">return_code</h2>
        <p><pre class="rule-signature"><a class="anchor" href="int.html">int</a> exec_result.return_code</pre></p>

    The return code returned after the execution of the program. 256 if the process was terminated by a time out; values larger than 128 indicate termination by a signal.


        <h2 id="stderr">stderr</h2>
        <p><pre class="rule-signature"><a class="anchor" href="string.html">string</a> exec_result.stderr</pre></p>

    The content of the standard error output returned by the execution.


        <h2 id="stdout">stdout</h2>
        <p><pre class="rule-signature"><a class="anchor" href="string.html">string</a> exec_result.stdout</pre></p>

    The content of the standard output returned by the execution.



</body>
</html>

<!-- {% endraw %} -->
