Python 当我在控制台外执行时,脚本执行目录发生变化
Python script execution directory changes when I execute outside of Console
TLDR:当我 运行 双击它时,我想将脚本的工作目录更改为脚本文件的位置(而不是 system32)。
我有一个非常烦人的问题,我无法解决。我正在构建一个 python 脚本,它将 4 个文本文件作为输入并使用这些文本文件创建一些图表和一个 excel sheet。我打算将我的脚本传递给一位朋友,他会将此脚本复制到不同的文件夹中,然后只需双击脚本即可在这些文件夹中执行脚本。我面临的问题是当我从 cmd 中执行我的代码时一切正常。但是如果我双击它,我的代码工作的目录会自动改变,我的程序找不到所需的 4 个文本文件。我在下面附上了我的代码的必需部分,还附上了一些屏幕截图。
ss1
ss2
def fileOpenCheckLoad(fname):
pl=list()
try:
fh=open(fname)
except:
print("ERROR:"+ fname +" is missing. Execution will terminate.")
x=input("Press enter to quit.")
quit()
test1=fh.readline()
test2=fh.readline()
if test1[6]!=fname[5] and test2!='t x y\n' :
print("ERROR: Check the contents of:"+ fname)
x=input("Press enter to quit.")
quit()
count=0
for lines in fh:
count=count+1
if count>2 :
nums=lines.split()
pl.append((float(nums[2]), float(nums[2])))
tbr=(pl,count-2)
return tbr
# main starts here.
cwd = os.getcwd()
print(cwd)
# In this part we open and load files into the memory. If there is an error we terminate.
(pl1, count1)=fileOpenCheckLoad('point1.txt')
(pl2, count2)=fileOpenCheckLoad('point2.txt')
(pl3, count3)=fileOpenCheckLoad('point3.txt')
(pl4, count4)=fileOpenCheckLoad('point4.txt')
在调用 os.getcwd()
之前,插入此行:
os.chdir(os.path.dirname(os.path.abspath(__file__)))
说明
__file__
是Python中的特殊变量;如所述 here,“__file__
是从中加载模块的文件的路径名”
os.path.abspath
returns 输入文件或目录的绝对路径(我包含这个是因为取决于你加载 Python 文件的方式,有时 __file__
将存储为相对路径,使用绝对路径往往更安全)
os.path.dirname
returns 包含输入文件的目录的名称(因为如果我们给它一个文件的名称,chdir
将 return 出错, 所以我们需要给它包含文件的目录的名称)
os.chdir
更改工作目录
TLDR:当我 运行 双击它时,我想将脚本的工作目录更改为脚本文件的位置(而不是 system32)。
我有一个非常烦人的问题,我无法解决。我正在构建一个 python 脚本,它将 4 个文本文件作为输入并使用这些文本文件创建一些图表和一个 excel sheet。我打算将我的脚本传递给一位朋友,他会将此脚本复制到不同的文件夹中,然后只需双击脚本即可在这些文件夹中执行脚本。我面临的问题是当我从 cmd 中执行我的代码时一切正常。但是如果我双击它,我的代码工作的目录会自动改变,我的程序找不到所需的 4 个文本文件。我在下面附上了我的代码的必需部分,还附上了一些屏幕截图。
ss1
ss2
def fileOpenCheckLoad(fname):
pl=list()
try:
fh=open(fname)
except:
print("ERROR:"+ fname +" is missing. Execution will terminate.")
x=input("Press enter to quit.")
quit()
test1=fh.readline()
test2=fh.readline()
if test1[6]!=fname[5] and test2!='t x y\n' :
print("ERROR: Check the contents of:"+ fname)
x=input("Press enter to quit.")
quit()
count=0
for lines in fh:
count=count+1
if count>2 :
nums=lines.split()
pl.append((float(nums[2]), float(nums[2])))
tbr=(pl,count-2)
return tbr
# main starts here.
cwd = os.getcwd()
print(cwd)
# In this part we open and load files into the memory. If there is an error we terminate.
(pl1, count1)=fileOpenCheckLoad('point1.txt')
(pl2, count2)=fileOpenCheckLoad('point2.txt')
(pl3, count3)=fileOpenCheckLoad('point3.txt')
(pl4, count4)=fileOpenCheckLoad('point4.txt')
在调用 os.getcwd()
之前,插入此行:
os.chdir(os.path.dirname(os.path.abspath(__file__)))
说明
__file__
是Python中的特殊变量;如所述 here,“__file__
是从中加载模块的文件的路径名”os.path.abspath
returns 输入文件或目录的绝对路径(我包含这个是因为取决于你加载 Python 文件的方式,有时__file__
将存储为相对路径,使用绝对路径往往更安全)os.path.dirname
returns 包含输入文件的目录的名称(因为如果我们给它一个文件的名称,chdir
将 return 出错, 所以我们需要给它包含文件的目录的名称)os.chdir
更改工作目录