开发者

Invoke make from different directory with python script

I need开发者_开发百科 to invoke make (build a makefile) in a directory different from the one I'm in, from inside a Python script. If I simply do:

build_ret = subprocess.Popen("../dir1/dir2/dir3/make",
                     shell = True, stdout = subprocess.PIPE)

I get the following: /bin/sh: ../dir1/dir2/dir3/make: No such file or directory

I've tried:

build_ret = subprocess.Popen("(cd ../dir1/dir2/dir3/; make)",
                     shell = True, stdout = subprocess.PIPE)

but the make command is ignored. I don't even get the "Nothing to build for" message.

I've also tried using "communicate" but without success. This is running on Red Hat Linux.


I'd go with @Philipp's solution of using cwd, but as a side note you could also use the -C option to make:

make -C ../dir1/dir2/dir3/make

-C dir, --directory=dir

Change to directory dir before reading the makefiles or doing anything else. If multiple -C options are specified, each is interpreted relative to the previous one: -C / -C etc is equivalent to -C /etc. This is typically used with recursive invocations of make.


Use the cwd argument, and use the list form of Popen:

subprocess.Popen(["make"], stdout=subprocess.PIPE, cwd="../dir1/dir2/dir3")

Invoking the shell is almost never required and is likely to cause problems because of the additional complexity involved.


Try to use the full path, you can get the location of the python script by calling

sys.argv[0]

to just get the path:

os.path.dirname(sys.argv[0])

You'll find quite some path manipulations in the os.path module

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜