从.txt错误打开.exe

时间:2013-02-06 00:03:44

标签: python file text

我目前正在创建一个脚本,只需在脚本中打开SAME目录中的程序即可。我想要一个名为“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,我不知道这是不是原因。

1 个答案:

答案 0 :(得分:0)

有两个可能的问题:

  • target.txt可能会以换行符结束,该换行会弄乱subprocess.call()

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

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

此代码适用于我,target.txt包含运行Unix date命令的字符串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()