如何在Python中获取原始命令行(包含空格、制表符等)?

5 投票
3 回答
6141 浏览
提问于 2025-04-16 18:39

可能重复的问题:
完整的命令行,按原样输入

sys.argv 是一个已经解析过的数组,这意味着它在处理时会丢失双引号、双空格,甚至可能会丢失制表符(具体情况还要看操作系统和命令行工具)。

我该如何获取解析之前的原始字符串呢?

3 个回答

-1

sys.argv 是 Python 用来获取命令行参数的唯一方式。在你运行 Python 程序之前,操作系统会处理一些事情,比如文件名的生成、参数的展开、引号的处理和单词的分割,然后把这些参数传递给 Python 程序(在 Unix 系统中;在 Windows 系统中,实际上是启动时解析这些参数,但为了兼容性,你不能完全依赖这一点)。

不过,要记住,POSIX shell 的引号规则允许你传递几乎任何字符(除了那些会结束字符串的 NUL 字节)。

你可以对比一下在 Python 中使用 subprocess.call 启动一个进程时,设置 shell 参数与不设置的区别。如果 shell=False,那么传递给新进程的 sys.argv 列表就是你传入的字符串列表(第一个元素是脚本的路径;Python 自己处理的参数会被去掉)。而如果 shell=True,那么这个字符串会传递给 shell,shell 会根据自己的规则来解释它。

-1

你不能这样做,因为这就是命令行如何把参数传递给程序的方式。

4

简单来说,你不能。

详细说:在Unix系统的命令行中,命令是由调用程序解析的,而当Python启动时,命令行已经被解析好了。

另外,在Windows系统上是可以的,但我想你是想要一个通用的回答。

撰写回答