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,还是没有。但是,此代码实际上以前有效;由于某种奇怪的原因,它停止了工作。我使用的是 PythonWin 编译器而不是 IDLE,我不知道是不是这个原因。

4

1 回答 1

0

有两个可能的问题:

  • target.txt可能以换行符结束,这搞砸了subprocess.call()

  • 如果target.txt不在当前目录中,则可以通过解析魔术变量来访问包含当前正在执行的 Python 文件的目录__file__

    但是,__file__在脚本加载时设置,如果在加载脚本和调用之间更改当前目录openclient(),则 的值__file__可能是相对于旧的当前目录。所以第一次读入脚本时必须保存__file__为绝对路径,以后再用它来访问与脚本同目录的文件。

这段代码对我有用,包含运行 Unix 日期命令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 回答