Python 在Vista中,将文件拖放到要作为参数运行的脚本会导致异常

Python 在Vista中,将文件拖放到要作为参数运行的脚本会导致异常,python,exception-handling,windows-vista,drag-and-drop,arguments,Python,Exception Handling,Windows Vista,Drag And Drop,Arguments,编辑:好的,我可以发誓,我测试它的方式表明getcwd也导致了异常,但现在看来这只是文件创建。当我把试块移到他们的位置时,它确实像你想象的那样抓住了它。因此,将其归因于用户错误。 原始问题: 我有一个脚本,我正在工作,我希望能够删除一个文件,让它运行与该文件作为一个参数。我签入了,我已经有了提到的注册表项(显然是Python2.6安装程序处理的)。但是,它抛出了一个我无法捕捉的异常。从控制台运行它可以正常工作,但是当我在上面放置文件时,它会抛出一个异常,然后关闭控制台窗口。我试图让它将标准错误重

编辑:好的,我可以发誓,我测试它的方式表明getcwd也导致了异常,但现在看来这只是文件创建。当我把试块移到他们的位置时,它确实像你想象的那样抓住了它。因此,将其归因于用户错误。
原始问题:
我有一个脚本,我正在工作,我希望能够删除一个文件,让它运行与该文件作为一个参数。我签入了,我已经有了提到的注册表项(显然是Python2.6安装程序处理的)。但是,它抛出了一个我无法捕捉的异常。从控制台运行它可以正常工作,但是当我在上面放置文件时,它会抛出一个异常,然后关闭控制台窗口。我试图让它将标准错误重定向到一个文件,但它在脚本中发生重定向之前抛出了异常。通过一些测试和快速的观察,我发现当我试图创建要写入错误的文件时,它抛出了一个IOError

import sys
import os

#os.chdir("C:/Python26/Projects/arguments")
try:
    print sys.argv
    raw_input()
    os.getcwd()
except Exception,e:
    print sys.argv + '\n'
    print e
f = open("./myfile.txt", "w")
如果我在控制台上运行这个程序时有任何参数,或者没有参数,那么它的行为就像人们所期望的那样。如果我通过在其上放置一个文件(例如test.txt)来运行它,它会运行,正确地打印参数,然后当调用os.getcwd()时,它会抛出异常,并且不会执行except:块中的任何内容,这使得我很难找到任何方法来实际获取异常文本以保持在屏幕上。如果我取消对os.chdir()的注释,脚本不会失败。如果我将该行移动到except块内,它将永远不会执行


我猜通过删除文件来运行,根据另一个链接问题,它使用WSH,不知怎么搞砸了它的权限或cwd,但我不知道如何解决它

鉴于这可能与Python无关,而是一个Windows问题(例如,我无法再现给定代码的错误),我建议在Python解释器启动时附加一个调试器。由于通过拖放操作隐式启动解释器,因此需要将Windows配置为在每次Python启动时自动附加调试器。若我没记错的话,本文提供了实现这一点所需的信息(若不使用VisualStudio,可以替换另一个调试器)


除此之外,我会在将文件拖到脚本上时拍摄快照,以了解正在发生的情况。

正如我在上面的编辑中指出的,错误是由工作目录更改为C:\windows\system32引起的,其中不允许脚本创建文件。我不知道如何让它在以这种方式启动时不改变工作目录,但能够像这样解决它

if len(sys.argv) == 1:
    files = [filename for filename in os.listdir(os.getcwd())
             if filename.endswith(".txt")]
else:
    files = [filename for filename in sys.argv[1:]]
我想,修复工作目录可以通过这种方式进行管理

exepath = sys.argv[0]    
os.chdir(exepath[:exepath.rfind('\\')])

有趣的问题。我同意这可能与windows权限和隐含的工作目录有关。问题是否仅发生在该文件夹上?你有没有试着去别的地方?