2013-02-06 119 views
0

我目前正在创建一个脚本,该脚本将简单地打开SAME目录中的程序作为脚本。我想要一个名为“target.txt”的文本文件,基本上脚本会读取“target.txt”中的内容并根据其内容打开文件。从.txt错误打开.exe文件

例如..该文本文件将读取“program.exe”里面,脚本将读取并打开program.exe。我这样做的原因是很容易改变脚本打开的程序,而不必实际改变里面的内容。

为此使用当前的IM是:

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

是输出:'进口操作系统; os.getcwd()'你期望它是什么? – bernie

+1

我不太明白你在说什么.. –

+0

它从命令行('python script.py')运行时会发生什么? – martineau

回答

0

有两个可能的问题:

  • target.txt可能与一个换行符,这打乱了subprocess.call()

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

    然而,__file__被设定在脚本加载时间,并且如果当前目录被加载脚本和主叫openclient()之间改变时,__file__值可以是相对于旧的当前目录。因此,当第一次读入脚本时,必须将__file__保存为绝对路径,然后稍后使用它来访问与脚本相同的目录中的文件。

此代码的工作对我来说,与包含字符串date运行Unix的date命令target.txt

#!/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() 
+0

嘿谢谢,我现在明白了更多。我结束了将“if __name__”部分放在一个定义中并运行它,我得到了错误“系统找不到指定的文件:'foo'”,我尝试更改“foo”字符串,但没有运气。任何建议,好先生? –

+0

哦,'os.chdir('foo')'命令行用于检查当前目录是否改变,函数是否仍然正常工作。为此,您需要在与运行脚本相同的目录中创建一个名为'foo'的示例目录。 – andrewdotn

+0

我在与我的代码相同的文件夹中创建了一个名为“foo”的文件夹。发生相同的错误。感谢所有帮助到目前为止,我仍然在学习(: –