【问题标题】:How to pass a very very long list of arguments to a program?如何将非常长的参数列表传递给程序?
【发布时间】:2014-09-25 17:48:00
【问题描述】:

我正在编写和运行程序,我需要将一长串数据文件传递给这些程序进行分析,有时是几十万。问题是参数列表可能太长以至于系统(Unix)拒绝运行它,输出:

bash: ./yourProgram: Argument list too long

是否有我可以更改的环境变量来绕过这个障碍?

我能想到的唯一解决方案是将我的程序列表写入一个单独的文件(使用ls ... >),然后逐行读取每个文件。你知道更简单的吗?

ps:如果重要的话,我的程序是用 C++ 编写的

【问题讨论】:

  • 通过stdin而不是参数列表发送文件列表有什么问题吗?只是好奇。
  • 这是一种荒谬的做法。正如 WhozCraig 所说,使用stdin。这就是它的用途。
  • 确实,我不知道stdin,只是实现了它。不确定它是否值得分享。

标签: c++ command-line-arguments


【解决方案1】:

最好将环境变量的值定义为以空格分隔的项目列表,例如,定义为

export MYLIST=a b ab cd ef

在您的程序中,使用 getenv("MYLIST") 获取 char * 形式的值,并使用标记化获取单个值

【讨论】:

    【解决方案2】:

    我会把它作为标准输入传递..

    echo "file1 file2 file3" | ./program
    

    【讨论】:

      【解决方案3】:

      如何将非常长的参数列表传递给程序?

      1. 将参数放在文件中
      2. 在启动时将文件重定向到应用程序的标准输入

        bash$ echo "arg1 arg2 arg3 ... argn" >> inputs.txt
        bash$ ./yourProgram  < inputs.txt
        

      这具有存储参数的优点(因此对于后续执行,您只需要运行第二行)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-29
        • 2019-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-16
        相关资源
        最近更新 更多