我在这里开发一个解析器,打开一个文件,读取它并在另一个文件中打印数据。
输入文件由sys.argv [1]确定,既可以处理命令行打开,也可以拖放(在windows中)。但是,当拖放文件时,它会给我
ioerror 13: Permission denied
查看sys.argv包含的内容,我执行了以下操作(来自cmd.exe)以使其包含相同内容:
C:\>python C:\test\iotest.py C:\test\iotestin.txt
失败了。但是,以下工作
C:\>cd test
C:\test>python iotest.py iotestin.txt
对我而言,上述将/应该几乎相同。
哦,如果不清楚,我将input / txt文件拖到python文件中,而不是相反。作为一名程序员,我总是喜欢使用CLI,但是这个软件的未来用户却没有,因此我需要这样做。
虽然非常简单,但仍有一些代码可以重现问题:
import sys
print sys.argv
raw_input("")
try:
print "opening",sys.argv[1]
infile = open(sys.argv[1])
outfile = open("out.txt", "w")
raw_input("")
except IndexError:
print "usage:",sys.argv[0].split("\\")[-1],"FILE"
raw_input("")
exit()
except IOError as (errno, strerror):
print "I/O error({0}): {1}".format(errno, strerror)
raw_input("")
exit()
raw_input("done")
答案 0 :(得分:4)
你使用outfile = open("out.txt", "w")
- 在第一个例子中,这将转到c:\ out.txt,我想这是你错误的来源。
答案 1 :(得分:0)
当获取错误时,工作目录可能在C:\Window\System32
:IOError:[Errno 2]没有这样的文件或目录:或13:权限被拒绝。
所以你需要先改为脚本或输入文件目录。如:
os.chdir(os.path.split(sys.argv[0])[0])
如果要更改为输入文件的文件夹,请尝试:
os.chdir(os.path.split(sys.argv[1])[0])