通过命令行参数,我可以传递多少数据给C++程序?

2024-05-23 03:57:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用C++和Python编写的程序之间传递数据。在

我发现最简单的方法之一是编译C++程序,然后用Python调用它,使用{{CD1>},并通过参数^ {< CD2>}/P>来传输数据。

这样可以避免使用Cython,boost。。。等。。。。我发现在windows上工作是一个巨大的痛苦。尤其是在一个没有连接到互联网的老化服务器上。(请不要回复这篇文章试图帮助cython或boost等-我想把讨论限制在主要问题上。)

我的问题是:这种方法的局限性是什么?在

我能以这种方式序列化/编码/解码整个数据数组并通过命令行参数传递它们吗?几GB大小的文件呢?在

这是一种比在硬盘上写然后从中读取更快的方法吗?在


编辑:看来这是相关的: Maximum Length of Command Line String


Tags: 方法程序服务器参数windows互联网cython传输数据
2条回答

不是一个完整的答案(我不能评论任何硬限制),但请记住,您在命令行上传递的任何数据都必须放入内存中,据我所知,在这个过程中没有办法释放内存。。。因此,这并不是共享千兆字节数据的实用方法。在

当您使用shell=True时,您构建的命令将由shell解释,shell可能(将)对接受的参数数量和参数的大小施加自己的一组限制。它还可能对参数总共消耗多少内存施加限制。 声明你的操作系统/外壳可能很有趣,这样其他人可能会参与进来-我怀疑Windows和cmd.exe是因为你的标签,但不能确定!在


总的来说,这是一个坏主意,而且(尽管这不是您问题的答案),您应该认真考虑使用管道进行进程间通信(IPC)。这将消除您的编码/解码开销,任何有关大小限制的顾虑,以及将数据写入磁盘的顾虑。在

main的签名是

int main(int argc, const char** argv)

因此,您受到argv大小的限制,不能保证传入超过32767个参数。根据你的操作系统和机器,在这之前可能还有其他限制,但这是语言内置的限制。在

请注意,对于任何给定的编译器,int的大小可能更大,并且可以支持更多的参数,但是标准不保证它。在

相关问题 更多 >

    热门问题