【问题标题】:Tkinter Not responding after entering cmd command with os module使用os模块输入cmd命令后Tkinter没有响应
【发布时间】:2021-08-29 23:13:03
【问题描述】:

我有一个运行功能的按钮。该函数应该运行 2 个 cmd 命令,第一个 cmd 命令工作正常,但 tkinter GUI 在执行第二个命令之前冻结。有没有办法解决这个问题?

使用pycharm和python 3.9

def runspotdl():
    os.system(f'cmd /k "my command here"')
    os.system(f'cmd /k "my second command here"')

【问题讨论】:

  • 请尝试创建minimal, reproducible example
  • 你给出了什么命令。
  • 首先可以将此函数放在自己的线程中,这对于 tkinter 不建议但似乎是合理的,原因似乎是第一个命令仍在执行,问题是 @987654323 @ 首先执行命令,然后等待它完成(在这种情况下,我认为不需要那些 cmd /k)然后在同一个终端中写入下一个命令,所以基本上它就像一个新行为此,还可以尝试查看 Popen 或 sth 我认为它的级别更高,更适合终端的东西

标签: python python-3.x tkinter cmd pycharm


【解决方案1】:

使用/k cmd 执行,然后保持打开状态。

使用/c cmd 执行并关闭。

因此,执行时您的第一个 cmd 窗口会执行,然后等待直到您关闭它,就像您关闭它一样,您的第二个 cmd 命令将在新的 cmd 窗口中执行。 此外,到现在为止,您的 Tkinter 窗口将冻结,因为它的程序仍在为 cmd 窗口运行。它会在你退出第二个 cmd 窗口时解冻。

所以,我的建议是,如果您没有使用第一个命令在 cmd 窗口中显示任何内容,则使用 /c 作为第一个命令,使用 /k 作为第二个命令(保持打开状态直到您想退出. 或者只是在每个命令中添加/c 在执行后关闭 cmd 窗口。) 例如

def runspotdl():
    os.system(f'cmd /c "1st cmd command"')
    os.system(f'cmd /k "2nd cmd command"')

【讨论】:

  • 你测试过这个吗?因为我很确定os.system 使用相同的终端。我认为这不会解决问题,因为os.sytem 只会在命令执行时执行,所以它仍然会等待,gui 无论如何都会冻结。只是这些命令可能需要一段时间才能执行,而在这种情况下,gui无法更新,实际上这意味着您还需要在最后一个命令之后关闭终端,但是我不认为使用'cmd' 命令首先是必要的
  • 是的,测试过了,os.system 一个接一个地使用了两个终端。我知道,这不会解决问题,我所尝试的只是解释发生了什么。是的,不需要使用新的cmd 窗口。
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
相关资源
最近更新 更多