我想在我的__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 args
内main()
命令的结果。据说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似乎将这些项目分开。我很难过。有谁知道这里有什么?
我希望有人能够分享一些见解。提前谢谢。
答案 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']
尾随退格被解释为转义字符,因为它紧接在"
之前,它将您的参数转换为单个字符串(或直到遇到未转义的"
)。