[英]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.