【发布时间】:2015-04-04 20:43:26
【问题描述】:
受another question here 的启发,我想以可移植的方式检索 Python 解释器的完整命令行。也就是说,我想获取解释器的原始argv,而不是排除解释器本身选项的sys.argv(如-m、-O 等)。
sys.flags 告诉我们设置了哪些布尔选项,但它没有告诉我们有关 -m 参数的信息,并且标志集必然会随着时间而改变,从而造成维护负担。
在 Linux 上,您可以使用 procfs 检索原始命令行,但这不是可移植的(而且有点粗糙):
open('/proc/{}/cmdline'.format(os.getpid())).read().split('\0')
【问题讨论】:
-
这是一个很好的问题......据我所知,这是不可能的(在 CPython 中)。在我看来,Py_Main 进行了一些解析以获取命令行参数,然后使用剩余的参数调用 PySys_SetArgv,而对
*argc和**argv不执行任何其他操作。有Py_GetArgcArgv,您可能会使用它——但我在文档化的 C-API 中的任何地方都看不到它... -
.split('\0')会比.replace('\0', ' ')更正确——否则您无法区分包含空格的参数和单独的参数。
标签: python command-line command-line-arguments argv