我们有一个带有 main() 的程序,它解析某些 CLP,但不会将它们保存在任何地方。 然后我有自己的插件代码,需要访问原始 CLP(以便我可以传输更多参数)。但是,我无法更改 main()
I saw that there is apparently a way to do this in C# ,我正在 Linux 上寻找等效的 Java 解决方案。
更新:显然,我知道 main() 的工作原理。遗憾的是,我无法更改现有应用程序或它的调用方式(CLP 除外)。我只能通过沙盒插件代码访问。我的问题是是否有办法获取调用 JVM 的命令行(而不是带 -D 的环境变量)。
最佳答案
除了以某种方式在 main 中执行此操作之外,我认为您唯一的其他选择是下降到操作系统级别并执行一些命令来获取参数。
在 Linux 上,运行进程的 cmd 行参数存储在 /proc/pid/cmdline
因此,要获得它们,您必须找到进程 ID。看这里:
How can a Java program get its own process ID?
然后使用这个打开的/proc/pid/cmdline 并解析它。此文件的格式和 c 中的示例位于此处:
最好将这两个调用包装在您从 java 调用的一个 shell 脚本中。
请注意,这将是非常不可移植的,而且有点老套。但如果需要必须...
关于java - 在 Java 中,有没有办法获取命令行参数,即使 main() 没有保存它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1058531/