【发布时间】:2017-06-14 12:26:11
【问题描述】:
我在用 C++ 和 python 编写的程序之间传递数据。
我发现最简单的方法之一是编译一个 C++ 程序,然后在 python 中使用subprocess.call('cprog.exe arg1 arg2', shell=True) 调用它,并通过参数arg1, arg2.... etc 传输数据
这避免了使用 Cython、boost……等等……我发现在 Windows 上工作是一个巨大的痛苦。特别是在未连接到互联网的老化服务器上。 (请不要回复试图帮助 cython 或 boost 等的帖子。我想将讨论限制在主要问题上。)
我的问题是:这种方法的局限性是什么?
我可以序列化/编码/解码整个数据数组并以这种方式通过命令行参数传递它们吗?几千兆字节的文件呢?
这会是比先写入硬盘再读取硬盘更快的方法吗?
编辑:这似乎是相关的: Maximum Length of Command Line String
【问题讨论】:
-
C++ 语言规范没有指定传递给
main()的命令行参数的最大大小。实际限制完全取决于您的操作系统。 -
这取决于你的操作系统限制在哪里,但会有一个。将数据传递给子进程的常用方法是使用标准输入。
-
根据您的回复,我更改了搜索词并发现:stackoverflow.com/questions/3205027/… 我认为其中包含答案!谢谢
-
IIRC cmd shell 的命令行限制为 8K 字符。但是,您提供的示例不需要 shell,因此如果您使用
shell=False,您可以将其增加到 Windows 的 32,766 个字符的限制。 -
不使用
shell=True还具有此答案中指出的其他优点:stackoverflow.com/a/3172488/2305545