【问题标题】:Python command line args format issuePython命令行参数格式问题
【发布时间】:2013-05-28 06:44:48
【问题描述】:

我是 Python 的初学者。下面是 Python 命令行参数的测试代码。如果从命令行使用不同的参数格式执行,我会得到不同的结果,但感觉很奇怪,谁能帮我理解为什么?

1, $test.py d:\     --> this seems ok for os.walk call
2, $test.py 'd:\'   --> this will cause nothing output

顺便说一句:我使用的是 Python 2.7.3

测试代码:

import os
import sys

if __name__ == '__main__':

    argMock = 'D:\\'

    path = len(sys.argv) > 1 and sys.argv[1] or argMock
    for root, dirs, files in os.walk(path):
        for name in files:
            print name

【问题讨论】:

  • 您可以试试$test.py 'd:'$test.py 'd:\valid_folder' 吗?可能是外壳问题。 (我没有窗口 cmd 行来测试它。)
  • 试试$test.py 'd:\\'。第一个反斜杠转义下一个字符 ('),因此字符串未终止。
  • 感谢您的回复。是的,我刚刚测试过,但遇到了同样的问题。 $test.py 'd:\folder' 没有输出; $test.py d:\folder 得到了正确的输出。
  • 嗨 Jakub M. 感谢您的回复,但遇到了同样的问题:$test.py d:\\folder 输出正确的内容; $test.py 'd:\\folder' 什么也不输出。
  • 在猜测中,单引号 包含在路径名中。我不熟悉您的外壳或操作系统,但您最后的评论指出了这一点。尝试去掉路径两边的单引号。

标签: python shell python-2.7


【解决方案1】:

Maresh 和 Jakub 的答案不正确。

命令行参数 d:\ 将变成字符串“d:\”。 命令行参数 'd:\' 将变成字符串 "'d:\'"。

使用输入 'D:\' 运行以下命令:

print sys.argv[1] # $test.py 'D:\\'
print argMock

产量:

'D:\\'
D:\

问题在于,在已经被视为字符串的内容周围加上引号只会将引号作为字符串的一部分包含在内。

【讨论】:

  • 但另一个问题:如果我想输入一个带有空格的 arg。怎么能处理。例如 'code' $test.py 'D:\test folder\folder' code
  • 使用双引号。 $test.py “你好世界”。单引号在所有语言/shell 中的使用方式与在 python 中的使用方式不同。
  • @mmmdreg 是的,双引号是正确的,谢谢你的好回答。
  • @Haibo 您是否有理由取消选择此作为正确答案?
  • @mmmdreg 实际上没有!你的答案是正确。是的,我也意识到了未选择的动作,我想可能是误操作;)
【解决方案2】:

问题不是来自你的程序,而是来自shell解释。

当您编写'd:\' 时,您的shell 会将反斜杠解释为下一个字符的转义命令。因此,您必须像这样转义反斜杠:'d:\\'

【讨论】:

  • shell(使用 windows cmd)将撇号视为字符串的一部分,这是实际问题。反斜杠对于他的代码示例中的 argMock = 'D:\\' 是必需的,他已经有了。
猜你喜欢
  • 2015-10-17
  • 2011-02-12
  • 2011-11-11
  • 1970-01-01
  • 2011-12-01
相关资源
最近更新 更多