python - 将命令行参数转发到 Python 中的进程

标签 python process arguments quotes command-line-arguments

我在 Windows XP 上使用带有 C30 工具链的原始 IDE (Microchip MPLAB)。 C 编译器的输出非常嘈杂,我无法控制,而且很难在输出窗口中发现实际的警告和错误。

我想编写一个 python 脚本来接收编译器的参数,使用相同的参数调用编译器,过滤结果并将它们输出到 stdout。然后我可以在工具链设置中用我的脚本替换编译器可执行文件。 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+ 个参数调用。

有没有办法将完全相同的参数从脚本转发到进程?

最佳答案

将命令参数作为列表提供给 Popen:

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

关于python - 将命令行参数转发到 Python 中的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1665917/

相关文章:

python - pycrypto 不会为 AES(CFB 模式)复制 NIST 测试向量

python - 测量 Jupyter Notebook 代码单元的运行时间

python - 如何在Python中识别进程处于卡住状态?

json - 将 bash 脚本的参数转换为 Web 服务的 JSON 数组

python - python.exe 将什么作为参数?

c - 两个或多个命令行参数?

python - 确定 python 分数是否可以具有等效的小数

python - 如何在 Python 中使用文本文件作为输入?

process - 我们可以将死锁用于任何事情吗?

bash - 使用 bash 打开和关闭进程