如何在Python __doc__中使用Windows文件路径

时间:2012-08-20 18:06:27

标签: python windows filepath docstring

我想在我的__doc__用法字符串中给我的用户一个示例。以下是与我的问题相关的代码的重要部分。

# jmetadata.py
'''
usage:     jmetadata.py inDirPath outFilePath
example:   jmetadata.py "\\\\Hal\\hal free agent 1\\backups\\videos\\" out.txt
'''

<...deleted code...>

def forPyWinTests():
    jmetadata("\\\\Hal\\hal free agent 1\\backups\\videos\\", "out.txt")

NUM_ARGS = 2
def main():
    args = sys.argv[1:]
    print args
    if len(args) != NUM_ARGS or "-h" in args or "--help" in args:
        print __doc__
        sys.exit(2)
    jmetadata(args[0], args[1])

if __name__ == '__main__':
    main()
    # print()
    # forPyWinTests()

我预测到这种行为:

>jmetadata.py
[]

usage:     jmetadata.py inDirPath outFilePath
example:   jmetadata.py "\\Hal\hal free agent 1\backups\videos\" out.txt


>

但是,当我将示例复制到命令行时,我将程序EXPECT为RUN。相反,我得到:

>jmetadata.py "\\Hal\hal free agent 1\backups\videos\" out.txt
['\\\\Hal\\hal free agent 1\\backups\\videos" out.txt']

usage:     jmetadata.py inDirPath outFilePath
example:   jmetadata.py "\\Hal\hal free agent 1\backups\videos\" out.txt

请注意上面的SECOND LINE。这是print argsmain()命令的结果。据说args列表只有1个元素['\\\\Hal\\hal free agent 1\\backups\\videos" out.txt'],而不是2.这对我来说没有意义。

我通过编写一个Windows .cmd文件做了一些调查。这是show_args.cmd:

rem show_args.cmd
echo %1 
echo %2

以下是运行的结果:

>show_args.cmd "\\Hal\hal free agent 1\backups\videos\" out.txt

>rem show_args.cmd

>echo "\\Hal\hal free agent 1\backups\videos\"
"\\Hal\hal free agent 1\backups\videos\"

>echo out.txt
out.txt

Windows似乎将这些项目分开。我很难过。有谁知道这里有什么?

我希望有人能够分享一些见解。提前谢谢。

1 个答案:

答案 0 :(得分:2)

尝试删除尾部反斜杠。改变这个:

jmetadata.py "\\Hal\hal free agent 1\backups\videos\" out.txt

到此:

jmetadata.py "\\Hal\hal free agent 1\backups\videos" out.txt

在上面的测试运行中,Python看到的参数是:

['\\\\Hal\\hal free agent 1\\backups\\videos" out.txt']

尾随退格被解释为转义字符,因为它紧接在"之前,它将您的参数转换为单个字符串(或直到遇到未转义的")。