如何在Python中获取原始命令行(包含空格、制表符等)?
可能重复的问题:
完整的命令行,按原样输入
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