質問

ここでは、ファイルを開いて読み取り、別のファイルにデータを印刷するパーサーで作業しています。

入力ファイルはsys.argv [1]から決定され、コマンドラインのオープンとドラッグアンドドロップ(ウィンドウ内)の両方を処理します。ただし、ファイルをドラッグアンドドロップすると、

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")
役に立ちましたか?

解決

outfile = open(" out.txt&quot ;," w")を使用します-最初の例では、これはc:\ out.txtになります。エラーの原因です。

他のヒント

エラーを取得するとき、作業ディレクトリは 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])

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top