title: Python subprocess.check_call() not recognising pushd and popd
body: <p>I'm on Ubuntu 15.04 (not by choice obviously) and Python 3.4.3 and I'm trying to execute something like the following.</p>
  
  <pre><code>subprocess.check_call("pushd /tmp", shell=True)
  </code></pre>
  
  <p>I need the <code>shell=True</code> because the actual code I'm trying to execute contains wildcards that need to be interpreted. However, this gives me the following error.</p>
  
  <pre><code>/usr/lib/python3.4/subprocess.py in check_call(*popenargs, **kwargs)
      559         if cmd is None:
      560             cmd = popenargs[0]
  --&gt; 561         raise CalledProcessError(retcode, cmd)
      562     return 0
      563 
  
  CalledProcessError: Command 'pushd /tmp' returned non-zero exit status 127
  </code></pre>
  
  <p>I've tried doing the same thing on my Mac (El Capitan and Python 3.5.1) and it works perfectly. I've also tried executing <code>subprocess.check_call("ls", shell=True)</code> on the Ubuntu 15.04 with Python 3.4.3 (for sanity check), and it works fine. As a final sanity check, I've tried the command <code>pushd /tmp &amp;&amp; popd</code> in Bash on the Ubuntu 15.04 and that works fine too. So somehow, on (my) Ubuntu 15.04 with Python 3.4.3, <code>subprocess.check_call()</code> does not recognise <code>pushd</code> and <code>popd</code>! Why?</p>