0

私は現在、スクリプトと同じディレクトリにあるプログラムを開くだけのスクリプトを作成しています。「target.txt」という名前のテキストファイルが欲しいのですが、基本的にスクリプトは「target.txt」の内容を読み取り、その内容に基づいてファイルを開きます。

たとえば、テキストファイルは内部の「program.exe」を読み取り、スクリプトはそれを読み取り、program.exeを開きます。私がこれを行っている理由は、実際に内部の内容を変更しなくても、スクリプトが開くプログラムを簡単に変更できるようにするためです。

これに使用している現在のスクリプトは次のとおりです。

import subprocess    

def openclient():
   with open("target.txt", "rb") as f:
      subprocess.call(f.read())
      print '''Your file is opening'''

同じディレクトリにあるのにtarget.txtが見つからないというエラーが表示されます。.txtを削除しようとしましたが、まだ何もありません。ただし、このコードは実際には以前は機能していました。奇妙な理由で動作を停止しました。IDLEの代わりにPythonWinコンパイラを使用していますが、これが理由かどうかはわかりません。

4

1 に答える 1

0

考えられる問題は2つあります。

  • target.txtおそらく、めちゃくちゃな改行で終わりますsubprocess.call()

  • が現在のディレクトリにない場合target.txtは、マジック変数を解析することで、現在実行中のPythonファイルを含むディレクトリにアクセスできます__file__

    ただし、__file__はスクリプトのロード時に設定され、スクリプトのロードと呼び出しの間に現在のディレクトリが変更されopenclient()た場合、の値は__file__古い現在のディレクトリに相対的である可能性があります。したがって__file__、スクリプトが最初に読み込まれたときに絶対パスとして保存し、後でそれを使用してスクリプトと同じディレクトリ内のファイルにアクセスする必要があります。

このコードは、Unixdateコマンドを実行するためtarget.txtの文字列を含んでいます。date

#!/usr/bin/env python2.7

import os
import subprocess

def openclient(orig__file__=os.path.abspath(__file__)):
    target = os.path.join(os.path.dirname(orig__file__), 'target.txt')
    with open(target, "rb") as f:
        subprocess.call(f.read().strip())
        print '''Your file is opening'''

if __name__ == '__main__':
    os.chdir('foo')
    openclient()
于 2013-02-06T01:00:14.037 に答える