我喜欢在我的 __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
>
但是,当我将示例复制到命令行时,我希望程序能够运行。相反,我得到:
>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
请注意上面的第二行。这是由 main()
内的 print args
命令产生的。据说 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 似乎将这些项目分开。我很困惑。有谁知道这是怎么回事吗?
希望有人能分享一些见解。提前致谢。
最佳答案
尝试删除结尾的反斜杠。更改此:
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']
尾随退格被解释为转义字符,因为它紧接在 "
之前,这会将您的参数转换为单个字符串(或者直到出现未转义的 "
遇到)。
关于python - 如何在 Python 中使用 Windows 文件路径 __doc__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12042748/