3

Python 2.5.1

http://www.cgsecurity.org/wiki/After_Using_PhotoRec

我刚刚运行了 PhotoRec,作为将文件类型分类到它们自己的文件夹中的一种方式给出的代码返回了这个错误。关于如何改变的任何建议?谢谢 :

[EDIT2:两点:

  1. 这个问题被否决了,因为它是代码的“用法”,而不是编程问题。它是否符合编码问题?我认为是的。
  2. 我已经返回并编辑了代码来自的页面,以阐明对参数的需求以造福他人。]

    gyaresu$ python recovery.py Traceback(最近一次调用最后一次):文件“recovery.py”,第 8 行,在 source = sys.argv[1] IndexError: list index out of range

脚本:

#!/usr/bin/env python
import os
import os.path
import shutil
import string
import sys

source = sys.argv[1]
destination = sys.argv[2]

while os.path.exists(source) != True:
    source = raw_input('Enter a valid source directory\n')
while os.path.exists(destination) != True:
    destination = raw_input('Enter a valid destination directory\n')

for root, dirs, files in os.walk(source, topdown=False):
    for file in files:
        extension = string.upper(os.path.splitext(file)[1][1:])
        destinationPath = os.path.join(destination,extension)

        if os.path.exists(destinationPath) != True:
            os.mkdir(destinationPath)
        if os.path.exists(os.path.join(destinationPath,file)):
            print 'WARNING: this file was not copied :' + os.path.join(root,file)
        else:
            shutil.copy2(os.path.join(root,file), destinationPath)
4

3 回答 3

2

它只是意味着程序需要两个命令行参数:源和目标。如果您希望在另一个函数中使用相同的代码,请将 sys.argv[1] 和 [2] 替换为您自己的变量。

于 2009-01-22T08:14:34.033 回答
2

或者您可以修改原始脚本并添加

if len(sys.argv) != 3:
    print "Require 2 arguments: %s <source> <destination>" %(sys.argv[0])
    sys.exit(1)

在导入语句之后进行正确的错误处理。

于 2009-01-22T08:57:37.207 回答
0

由于脚本会在路径不存在时询问路径,因此您可以将程序参数设为可选。

改变

source = sys.argv[1]
destination = sys.argv[2]

source = sys.argv[1] if len(sys.argv > 1) else ""
destination = sys.argv[2] if len(sys.argv > 2) else ""
于 2009-01-22T08:55:29.427 回答