【发布时间】:2011-11-18 14:12:54
【问题描述】:
我们开发人员编写的大多数应用程序都需要在启动时进行外部参数化。我们传递文件路径、管道名称、TCP/IP 地址等。到目前为止,我一直在使用 命令行 将这些传递给正在启动的应用程序。我必须解析main 中的命令行并将参数指向需要它们的位置,这当然是一个好的设计,但很难维护大量的论据。最近我决定使用环境变量机制。它们是全局的并且可以从任何地方访问,从架构的角度来看,这不太优雅,但限制了代码量。
这是我对这两种策略的第一印象(可能也很浅薄),但我想听听更有经验的开发人员的意见——使用环境变量和命令行参数传递的优缺点是什么流程的参数?我想考虑以下事项:
- 设计质量(灵活性/可维护性),
- 内存限制,
- 解决方案的可移植性。
备注:
广告。 1.这是我感兴趣的主要方面。
广告。 2. 这有点务实。我知道 Windows 上的一些限制,目前是huge(命令行和环境块都超过 32kB)。我想这不是问题,因为如果需要,您应该使用文件来传递大量参数。
广告。 3. 我对 Unix 几乎一无所知,所以我不确定这两种策略是否像在 Windows 上一样可用。请详细说明。
【问题讨论】:
-
您能否提供更多细节,例如参数的实际数量?如果他们有分组,或者他们都是随机的?这是什么语言? java、c++ 等...我要求详细程度的原因是,虽然用任何语言处理它都可能是一个问题,但可能存在您不知道的特定于语言实现的解决方案。
-
只是提到 *nix 操作系统,它们没有像“全局环境变量”这样的东西,并且每个 env var 在分叉时间从父进程继承到子进程。因此,“全局”不是命令行环境变量的专家,至少对于那些操作系统而言。
-
嗨,@jamesDrinkard。我对一般方法感兴趣。如果你想将 20 个不同的标记字符串/整数/实数参数从 32 位解释器运行的 Python 脚本传递到用 C++ 编写的 64 位应用程序,你会使用什么方法?
-
嗨,@shr。感谢您的 *nix 说明。正如雷蒙德在下面指出的那样,对于这项任务来说,这样的全局性根本不适合。
-
这可能是相关的并且提倡环境变量:devcenter.heroku.com/articles/config-vars
标签: command-line process environment-variables argument-passing spawn