吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 533|回复: 5
收起左侧

[求助] pyside6调用外部代码报错 求大佬赐教

[复制链接]
24WOK 发表于 2024-5-2 18:35
[Python] 纯文本查看 复制代码
from PySide6.QtWidgets import QApplication, QWidget
from 汽车宝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()

[Python] 纯文本查看 复制代码
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里面调用就报错,为啥呢

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 24WOK 发表于 2024-5-2 18:38
其实可以不调用,直接放在ui代码里   但感觉不太优雅
Cool_Breeze 发表于 2024-5-2 19:35
exec(open("mainCode.py", encoding='utf-8').read())自己用还可以
 楼主| 24WOK 发表于 2024-5-2 20:20
Cool_Breeze 发表于 2024-5-2 19:35
exec(open("mainCode.py", encoding='utf-8').read())自己用还可以

没懂   。。。。。。
liwind 发表于 2024-5-3 00:10
报错信息说了呀,你这个域里面没有导入包含get_band_response的模块啊。
exec来让脚本执行本通常不能成功执行相对路径的导入语句。
别这么写啊,直接写个函数不就行了,别用exec,这玩意有各种问题。
Cool_Breeze 发表于 2024-5-3 16:59
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功能强大但也容易被滥用,一定要谨慎使用。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 21:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表