sys.argv
已经是一个解析过的数组,丢失了双引号,双倍空格甚至可能是制表符(当然,这取决于OS / shell)。
如何在解析之前访问原始字符串?
答案 0 :(得分:3)
很快,你没有。
Long:在Unix命令行上由调用程序解析,并且在python启动时你已经解析了命令行。
PS。在Windows上它是可能的,但我想你正在寻找一般的回应。
答案 1 :(得分:0)
你不能明确地这样做,因为这就是shell将参数传递给程序的方式。
答案 2 :(得分:0)
sys.argv
是Python得到的。 shell在将参数传递给Python进程之前处理了文件名生成(globs),参数(变量)扩展,引号和单词拆分(在Unix中;在Windows中它是启动实际解析它,但是为了便携性,你不能依靠那个)。
但是,请记住,POSIX shell引用规则允许传递您可能想要的任何字符(除了终止字符串的NUL字节)。
比较使用subprocess.call使用shell
参数设置或不使用shell=False
参数创建Python的过程。使用sys.argv
字符串列表是在启动过程中shell=True
中出现的内容(从脚本路径开始; Python本身处理的参数被删除),而{{1}}字符串是传递给shell,根据自己的规则解释它。