我使用的粗IDE(Microchip的MPLAB)在Windows XP C30工具链。 C编译器有一个非常嘈杂的输出,我无法控制,这是很难发现在输出窗口实际的警告和错误。

我想写一个python脚本,将接收参数为编译器,调用具有相同的参数,过滤结果,并将其输出编译器的标准输出的。然后,我可以用我的工具链设置脚本更换编译器可执行文件。所述IDE调用我的脚本和接收过滤编译器输出。

我的用于执行编译的代码看起来是这样的:

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

问题是,从参数报价是在脚本执行消耗,所以如果IDE叫我的脚本使用以下参数:

  

的main.c -o “main.o”

的值的参数

  

的main.c -omain.o

最明显的解决办法是加上引号整个参数列表,但是这需要在编译器IDE调用代码修改。我使用批处理文件也尝试过,但它只能接受九个参数(%1%9),和编译器调用与15+参数。

有没有一种方法来精确转发从脚本相同参数的程序?

有帮助吗?

解决方案

您壳吃引号(在Python脚本甚至从来没有收到他们),所以我想这是不是很容易让他们“不变”。

其他提示

提供的命令参数POPEN作为列表:

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

正如ChristopheD所述外壳移除引号。

不过,你不需要用popen时自己创建的字符串:它可以自动处理,对你。你可以这样做,而不是:

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

在子模块希望将正确地传递参数给你。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top