我目前正在创建一个脚本,只需在脚本中打开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,我不知道这是不是原因。
答案 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()