pyside6调用外部代码报错 求大佬赐教
from PySide6.QtWidgets import QApplication, QWidgetfrom 汽车宝UI import Ui_Form
import hello_rc
from PySide6.QtGui import QPixmap
from PySide6.QtCore import Slot
import mainCode
class MyWindow(QWidget, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
# 将点击信号连接到槽函数
self.pushButton_2.clicked.connect(self.execute_imported_code)
# 槽函数,当 pushButton_2 被点击时执行引入的代码
@Slot()
def execute_imported_code(self):
# 直接运行 mainCode 模块中的代码
exec(open("mainCode.py", encoding='utf-8').read())
# 或者直接在这里执行引入的代码
print("PushButton 2 clicked, execute imported code here")
if __name__ == '__main__':
app = QApplication([])
window = MyWindow()
window.show()
app.exec()
Traceback (most recent call last):
File "E:\PycharmPFile\XYJD\汽车之家\UI\05.py", line 20, in execute_imported_code
exec(open("mainCode.py", encoding='utf-8').read())
File "<string>", line 385, in <module>
File "<string>", line 295, in main
NameError: name 'get_band_response' is not defined
我单独运行没问题的 在pyside6里面调用就报错,为啥呢 其实可以不调用,直接放在ui代码里 但感觉不太优雅 exec(open("mainCode.py", encoding='utf-8').read())自己用还可以 Cool_Breeze 发表于 2024-5-2 19:35
exec(open("mainCode.py", encoding='utf-8').read())自己用还可以
没懂 。。。。。。 报错信息说了呀,你这个域里面没有导入包含get_band_response的模块啊。
exec来让脚本执行本通常不能成功执行相对路径的导入语句。
别这么写啊,直接写个函数不就行了,别用exec,这玩意有各种问题。 24WOK 发表于 2024-5-2 20:20
没懂 。。。。。。
exec 是Python中的一个内置函数,它用于执行字符串作为Python代码。使用exec函数时确实存在一些潜在的安全风险,因为可以执行任意的代码,包括可能破坏或绕过程序限制的代码。以下是一些可能导致的安全问题:
代码注入:
如果exec函数接收来自用户的输入(如用户输入的字符串),并且没有经过适当的处理和验证,那么恶意用户可以插入恶意代码,从而可能导致程序崩溃或执行恶意操作。
权限提升:
如果在exec中执行的代码能够访问到系统资源或执行系统命令,未经许可的代码可能会导致数据泄露、权限提升或文件系统破坏。
代码执行效率:
对于大型或复杂的代码块,exec可能会比直接运行模块或函数更慢,因为它需要每次解析和编译代码。
为了提高安全性,应该遵循以下最佳实践:
避免无限制的exec:
尽量不要在不受限制的上下文中使用exec。如果可能,尽量使用eval替代,但eval也有类似的安全风险。
输入验证和处理:
对传递给exec的字符串进行严格的字符串清理和验证,确保它只包含预期的语法和功能。
使用exec在受限范围内:
在受信任的上下文中使用exec,确保代码无法访问不希望被修改的部分。
使用模块或函数:
避免直接使用exec,尽量使用模块或函数,因为它们通常经过更严格的处理和安全检查。
安全沙箱:
如果你的应用需要执行动态代码,考虑使用安全沙箱(如使用Python的安全模块如ast.literal_eval或使用第三方库如Jinja2模板引擎)来限制代码执行的范围。
只执行已知和可信的代码:
按需运行经过验证的函数或代码片段,而不是由用户控制的字符串。
请始终牢记,Python的exec功能强大但也容易被滥用,一定要谨慎使用。
页:
[1]