Python 文件在正常运行时没有错误,但当我在外部运行时,它会显示图像时出错



当我双击bios.pyw时,它运行良好,但是当我从firm.pywos.system("pythonw ..\system_pbl\bios\bios.pyw")运行此命令时,它给了我一个错误

我尝试使用start命令运行它,但它没有做任何事情

我尝试在同一个目录中运行它,并使用 .cmd 和 .ps1 以及一个.bat文件,但没有运气

公司-

import os
from tkinter import *

os.system("python ..\system_pbl\bios\bios.pyw")

生物.pyw-

sil = "..\..\system_res files\sil.sif"
si = PhotoImage(file=_sil)#-error
s_label = Label(app,image = si,borderwidth=0).place(y=0,x=0)

我得到的错误是

File "C:UsersgavinAppDataLocalProgramsPythonPython36-32libtkinter__init__.py", line 3498, in __init__
self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't open "....system_res filessil.sif": no such file or directory

这是文件系统:

文件系统:

  1. 消防器具

    2.S^

    3.消防系统->公司.pyw 3.system_pbl -> bios->bios.pyw, data_change.pyw, local_update.py -> boot->boot.pyw 3.system_res文件 -> sil.sif, usr_data.dde

脚本对数据文件的路径进行硬编码,以便始终必须在包含数据文件的目录下两级的子目录中运行它。

如果

python ./bios.pyw

然后工作

python ../firm.pyw

也应该工作,而

cd ..
python ./firm.pyw

将失败,因为cd将当前目录切换到数据文件目录下两级的目录(您现在只比数据文件目录低一级)。也许另请参阅 https://stackoverflow.com/a/55342466/874188

如果以不同的方式运行脚本(例如双击),则必须弄清楚如何在该机制中控制当前工作目录。但更好的解决方法是不对相对路径进行硬编码。你可以

  • 更改脚本,使其接受数据文件目录的路径作为命令行参数或配置参数;
  • 更改脚本,使其需要当前目录中的数据文件子目录。这使用起来很麻烦,但至少是简单且可预测的行为;
  • 更改脚本,使其根据环境中的某些内容(例如,您import模块的绝对路径)确定数据文件目录的绝对路径;请参阅如何检索模块的路径?

更广泛地说,你几乎肯定不应该将Python作为Python的子进程运行。您可能需要稍微重新组织代码以避免os.system()但您应该发现重新组织的代码既易于使用又更快。

最新更新