subprocess.Popen(..., cwd=...) and Makefile $(PWD) don't play nice

Thomas Bellman bellman at
Tue Oct 7 05:24:01 CEST 2008

"Gabriel Genellina" <gagsl-py2 at> writes:

> En Mon, 06 Oct 2008 13:09:26 -0300, Miki <miki.tebeka at> escribió:

>> Can anybody explain why Makefile $(PWD) does show the right directory
>> when running under subprocess.Popen(..., cwd=...)
>> For example:
>>     [18:07] tmp $cat /tmp/p/Makefile
>>     all:
>>         @echo $(PWD)
>>     [18:07] tmp $cat t
>>     #!/usr/bin/env python
>>     from subprocess import Popen
>>     Popen(["make"], cwd="/tmp/p")
>>     [18:07] tmp $./t
>>     /tmp
>> The output of the "make" command should have been "/tmp/p" and not "/
>> tmp"

> I've tried the equivalent version on Windows and it worked fine.
> And I can't see how make could find the Makefile at /tmp/p if the current
> directory were another one... (?)

The problem is, he is not printing the name of the current working
directory; he is printing the value of the variable $PWD.  That is
likely set from the environment by the shell he started the Python
program from, but Python does *not* update to reflect changes to
the working directory.

Use '@pwd' instead of '@echo $(PWD)'.

Thomas Bellman,   Lysator Computer Club,   Linköping University,  Sweden
"Beware of bugs in the above code; I have    !  bellman @
 only proved it correct, not tried it."      !  Make Love -- Nicht Wahr!

More information about the Python-list mailing list