You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中让Linux终端命令在新终端中执行?

我来帮你搞定这个问题——你想要在Python脚本里用subprocess执行Shell命令时,要么让命令在新终端窗口里运行(避免和脚本本身的输出混在一起),要么把命令的输出单独保存起来,对吧?下面分两种场景给你具体的实现方案:

方案一:让命令在新终端窗口执行

不同Linux桌面环境的终端程序不一样,对应的调用方式也略有区别,给你列几个常用的:

  • GNOME终端(Ubuntu等默认桌面)
    用gnome-terminal配合--分隔终端参数和要执行的命令:

    import subprocess
    # 让df -h在新终端窗口执行
    subprocess.call(["gnome-terminal", "--", "df", "-h"])
    

    要是执行完命令后终端窗口立刻关闭了,想让窗口保持打开的话,可以加个bash来维持会话:

    subprocess.call(["gnome-terminal", "--", "bash", "-c", "df -h; exec bash"])
    

    这里bash -c用来执行一串命令,先跑df -h,exec bash会替换当前进程为新的bash,窗口就不会自动关闭了。

  • Xterm终端
    Xterm用-e参数指定要执行的命令:

    subprocess.call(["xterm", "-e", "df -h"])
    

    同样要保持窗口的话,改成:

    subprocess.call(["xterm", "-e", "bash -c 'df -h; exec bash'"])
    
  • Konsole终端(KDE桌面)
    和Xterm类似,用-e参数:

    subprocess.call(["konsole", "-e", "df -h"])
    

    保持窗口的写法:

    subprocess.call(["konsole", "-e", "bash -c 'df -h; exec bash'"])
    
方案二:直接保存命令输出到文件(无需新终端)

如果只是不想让命令输出和脚本输出混在一起,直接把输出重定向到文件更简单,不需要额外打开终端:

import subprocess

# 把df -h的标准输出和错误输出都写到output.txt里
with open("output.txt", "w") as output_file:
    subprocess.call(["df", "-h"], stdout=output_file, stderr=output_file)

要是你只想保存标准输出,去掉stderr=output_file就行;如果想把错误输出合并到标准输出里,换成stderr=subprocess.STDOUT。

另外,如果你想先在Python里捕获输出,再自己处理(比如单独打印或者分文件保存),可以用subprocess.check_output():

import subprocess

try:
    # 捕获命令的输出(text=True让输出以字符串返回,Python3.7+可用)
    cmd_output = subprocess.check_output(["df", "-h"], stderr=subprocess.STDOUT, text=True)
    # 保存到文件
    with open("df_output.txt", "w") as f:
        f.write(cmd_output)
    # 也可以在脚本里单独打印,和脚本本身的输出区分开
    print("\n=== df命令的输出结果 ===")
    print(cmd_output)
except subprocess.CalledProcessError as e:
    print(f"命令执行出错啦,错误信息:{e.output}")

内容的提问来源于stack exchange,提问作者spectre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:27:07