Question

I'm using a crude IDE (Microchip MPLAB) with C30 toolchain on Windows XP. The C compiler has a very noisy output that I'm unable to control, and it's very hard to spot actual warnings and errors in output window.

I want to write a python script that would receive arguments for compiler, call the compiler with same arguments, filter results and output them to stdout. Then I can replace the compiler executable with my script in toolchain settings. The IDE calls my script and receives filtered compiler output.

My code for executing the compiler looks like this:

arguments = ' '.join(sys.argv[1:])
cmd = '%s %s' % (compiler_path, arguments)
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

The problem is that quotes from arguments are consumed on script execution, so if IDE calls my script with following arguments:

main.c -o"main.o"

the value of arguments is

main.c -omain.o

The most obvious solution is to put whole argument list in quotes, but this would require modification in compiler calling code in IDE. I also tried using batch file, but it can only accept nine parameters (%1 to %9), and compiler is called with 15+ parameters.

Is there a way to forward exactly the same arguments to a process from script?

Was it helpful?

Solution

Your shell is eating the quotes (the python script never even receives them) so I suppose it's not very easy to get them 'unaltered'.

OTHER TIPS

Give the command arguments to Popen as a list:

arguments = sys.argv[1:]
cmd = [compiler_path] + arguments
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

As ChristopheD said the shell removes the quotes.

But you don't need to create the string yourself when using Popen: it can handle that for you automatically. You can do this instead:

import sys, subprocess
process = subprocess.Popen(sys.argv[1:], executable=compiler_path, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

The subprocess module hopefully will pass the arguments correctly for you.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top