title: Python, AttributeError: RunCmd instance has no attribute 'p' for delta debug
body: <p>I have a Python program that produces an error:</p>
  
  <pre><code>File "myTest.py", line 34, in run
     self.output = self.p.stdout
  AttributeError: RunCmd instance has no attribute 'p'
  </code></pre>
  
  <p>The Python code:</p>
  
  <pre><code>class RunCmd():
  
      def __init__(self, cmd):
          self.cmd = cmd
  
      def run(self, timeout):
          def target():
              self.p = sp.Popen(self.cmd[0], self.cmd[1], stdin=sp.PIPE,
                                stdout=sp.PIPE, stderr=sp.STDOUT)
  
          thread = threading.Thread(target=target)
          thread.start()
          thread.join(timeout)
  
          if thread.is_alive():
              print "process timed out"
              self.p.stdin.write("process timed out")
              self.p.terminate()
              thread.join()
  
          self.output = self.p.stdout             #self.p.stdout.read()?
          self.status = self.p.returncode
  
      def getOutput(self):
          return self.output
  
      def getStatus(self):
          return self.status
  </code></pre>
  
  <p>Here's the entire back trace. </p>
  
  <pre><code>Exception in thread Thread-1:
  Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
      self.run()
  File "/usr/lib/python2.7/threading.py", line 505, in run
      self.__target(*self.__args, **self.__kwargs)
  File "myTest.py", line 18, in target
      self.p = sp.Popen(self.cmd, stdin=PIPE,
  NameError: global name 'PIPE' is not defined
  
  Traceback (most recent call last):
  File "myTest.py", line 98, in &lt;module&gt;
      c = mydd.ddmin(deltas)              # Invoke DDMIN
  File "/home/DD.py", line 713, in ddmin
      return self.ddgen(c, 1, 0)
  File "/home/DD.py", line 605, in ddgen
      outcome = self._dd(c, n)
  File "/home/DD.py", line 615, in _dd
      assert self.test([]) == self.PASS
  File "/home/DD.py", line 311, in test
      outcome = self._test(c)
  File "DD.py", line 59, in _test
      test.run(3)
  File "DD.py", line 30, in run
      self.status = self.p.returncode
  AttributeError: 'RunCmd' object has no attribute 'p'
  </code></pre>
  
  <p>What does this error mean and what is it trying to tell me?</p>