繁体   English   中英

使用python的线程模块

[英]Using python's Threading module

我正在开发一个 python 程序,该程序最终将能够在 linux 系统上执行不同的操作(更新、互联网速度测试、显示机器信息......)其中一些操作需要时间,我的目标是显示加载 Z6F1C25ED1523092F1BBF9DEEBE5Z任务被执行。 这需要执行异步函数和使用线程模块。 我只是在程序的测试阶段,遇到线程模块的问题,不仅我的程序图形界面的function在我执行其他动作时没有执行,而且在执行结束时也没有执行程序崩溃的辅助功能。 谁能帮我?

谢谢。

代码(python文件):

from kivy.app import App
from kivy.uix.widget import Widget
import os
import threading



class MainWidget(Widget):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def maj(self):
        th2 = threading.Thread(target=os.system("echo 'user_password' |sudo -S dnf -y upgrade"))
        th2.start()







class TestApp(App):
    pass


th1 = threading.Thread(target=TestApp().run())
th1.start()

代码(.kv 文件):

MainWidget:

<MainWidget>:
    Button:
        text: "MAJ"
        on_press: root.maj()
    AsyncImage:
        source: "images/test.gif"
        pos: 300, 300

使用www.DeepL.com/Translator翻译(免费版)

不确定您要完成什么,但os.system()调用在新的 shell 中执行提供的命令(请参阅文档)。 所以,当你执行:

th2 = threading.Thread(target=os.system("echo 'user_password' |sudo -S dnf -y upgrade"))

os.system()调用立即执行(不在新线程中),并且Thread创建尝试将os.system()的返回安排为其目标。 然后th2.start()调用os.system()返回的任何内容(可能是退出代码),并且应该产生错误。

无论如何,也许您应该使用subprocess.Popen()而不是Thread 请参阅文档 这将在新进程中运行提供的系统命令,并且不会等待其完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM