Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以将多少数据传递给C++;通过其命令行参数的程序? 我在用C++和Python编写的程序之间传递数据。p> p>我发现最简单的方法之一是编译C++程序,然后用python调用它,使用子进程。调用('cPr.EXGAR1ARG2',shell=true)< /> >,并通过参数>代码> ARG1,ARG2来传输数据。etc_Python_C++_Cmd - Fatal编程技术网

我可以将多少数据传递给C++;通过其命令行参数的程序? 我在用C++和Python编写的程序之间传递数据。p> p>我发现最简单的方法之一是编译C++程序,然后用python调用它,使用子进程。调用('cPr.EXGAR1ARG2',shell=true)< /> >,并通过参数>代码> ARG1,ARG2来传输数据。etc

我可以将多少数据传递给C++;通过其命令行参数的程序? 我在用C++和Python编写的程序之间传递数据。p> p>我发现最简单的方法之一是编译C++程序,然后用python调用它,使用子进程。调用('cPr.EXGAR1ARG2',shell=true)< /> >,并通过参数>代码> ARG1,ARG2来传输数据。etc,python,c++,cmd,Python,C++,Cmd,这避免了使用Cython、boost。。。等我发现在windows上工作是一件非常痛苦的事情。尤其是在未连接到internet的老化服务器上。(请不要回复这篇试图帮助cython或boost等的帖子-我想把讨论限制在主要问题上。) 我的问题是:这种方法的局限性是什么 我可以序列化/编码/解码整个数据数组,并以这种方式通过命令行参数传递它们吗?几GB大小的文件呢 这是一种比向硬盘写入然后从硬盘读取更快的方法吗 编辑:这似乎是相关的: 主要的签名是 int main(int argc, const

这避免了使用Cython、boost。。。等我发现在windows上工作是一件非常痛苦的事情。尤其是在未连接到internet的老化服务器上。(请不要回复这篇试图帮助cython或boost等的帖子-我想把讨论限制在主要问题上。)

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

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

这是一种比向硬盘写入然后从硬盘读取更快的方法吗


编辑:这似乎是相关的:

主要的签名是

int main(int argc, const char** argv)
因此,您受到argv大小的限制,无法保证传入超过32767个参数。在此之前,基于操作系统和机器,您可能会遇到其他限制,但这是内置于语言中的限制

请注意,对于任何给定的编译器,可能会有更大的int值,并且可能能够支持更多的参数,但这并不是标准的保证。

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

当您使用
shell=True
时,您生成的命令将由shell解释,它可能(将)对接受的参数数量和参数大小施加自己的一组限制。它还可能对参数总共消耗的内存量施加限制。 声明您的OS/shell可能很有趣,这样其他人可能会参与进来-我怀疑Windows和
cmd.exe可能是由于您的标记,但不能确定



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

C++语言规范没有指定传递给主()/<代码>的命令行参数的最大大小。实际的限制完全取决于你的操作系统。它取决于你的操作系统,限制在哪里,但会有一个限制。通常将数据传递给子进程的方法是使用stdin。根据您的回答,我更改了搜索条件,发现:我认为其中包含答案!ThanksIIRC cmd shell的命令行限制为8K个字符。但是,您给出的示例不需要shell,因此如果您使用
shell=False
,您可以将其增加到32766个字符的窗口限制。不使用
shell=True
也有此答案中指出的其他优点:A)参数是向后的B)为什么2147483647?A)哎哟-语义无论如何;)B) int有一个定义良好的范围-或者你是说argc可能是负数?interesting@NathanOliver如果我们假设
int
是32位,那么argc的最大值将是2147483647。我们不能假设
int
是32位。标准要求它的最大值必须是16位整数可以容纳的值,但它可以容纳更多的值
int
可以是64位,这会给您一个更大的值。您忘记了shell可以在命令行参数的数量上设置比int大小更低的限制。太好了-谢谢!我现在将研究使用管道。