首页 > 解决方案 > 使用子进程创建 konsole 实例不会释放进程

问题描述

我正在尝试使用子进程打开终端实例,但找不到如何为 bash 命令添加 & 参数

在 bash 中,以下命令按要求工作

konsole --workdir /home/jeff/projects &

但是当我运行以下命令时,系统会打开新的 Konsole 窗口,但我用来运行命令的窗口仍然很忙 - 进程未释放

konsole --workdir /home/jeff/projects

在我的 python 程序中,我有以下代码

import subprocess
subprocess.run(['konsole',
                '--workdir',
                '',
                '/home/jeff/projects',
                ])
print('finished')

当我运行代码时,程序挂起并且从未到达print('finished')命令

如何将&放入 python 子进程命令?

如果我为 Gnome 终端运行类似的命令,我不需要命令行上的 &

gnome-terminal --working-directory=/home/jeff/projects

并且python代码工作并释放调用终端

subprocess.run(['gnome-terminal',
                '--working-directory=/home/jeff/projects',
                ])
print('finished')

标签: pythonbashsubprocessgnome-terminalkonsole

解决方案


您可以使用以下方法实现您想要的Popen

#!/usr/bin/env python3
from subprocess import Popen
import time

p = Popen(['konsole',
           '--workdir',                                                                                                                                                                                                                                
           '/home/jeff/projects'
           ])
print('finished starting konsole')
time.sleep(30) # ... do other stuff while konsole is running
print('terminating konsole')
p.terminate()  # terminate konsole if needed

推荐阅读