当我双击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
这是文件系统:
文件系统:
消防器具
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()
但您应该发现重新组织的代码既易于使用又更快。