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

如何从Python脚本异步调用另一个脚本并屏蔽其输出

解决subprocess调用脚本无需等待且屏蔽输出的问题

你当前代码的问题在于把shell重定向符号> /dev/null 2>&1当成了python3的命令行参数传递,而不是让shell处理重定向逻辑,所以1test.py的输出仍然会打印到终端。以下是两种可行的解决方案:

方案1:使用subprocess内置重定向参数(推荐,更安全)

无需依赖shell,直接通过subprocess的参数实现输出屏蔽,同时保持异步执行:

修改后的2test.py代码:

import subprocess
print("starting")
# 正确传递命令参数,用内置参数屏蔽所有输出
subprocess.Popen(
    ["python3", "1test.py"],
    stdout=subprocess.DEVNULL,
    stderr=subprocess.STDOUT  # 将错误输出合并到标准输出一起屏蔽
)
print("done")

说明:

  • subprocess.DEVNULL等价于系统的/dev/null,会丢弃所有写入的输出内容
  • 若需要单独处理错误输出,可将stderr单独设为subprocess.DEVNULL

方案2:使用shell=True(适合简单场景,注意安全风险)

如果要沿用shell重定向语法,需将整个命令作为字符串传递,并开启shell=True,让shell解析命令逻辑:

修改后的2test.py代码:

import subprocess
print("starting")
subprocess.Popen("python3 1test.py > /dev/null 2>&1", shell=True)
print("done")

注意:shell=True存在命令注入风险,若命令中包含用户可控的输入内容,不建议使用该方案。

执行修改后的代码后,会立即输出starting和done并回到命令行,1test.py的所有输出都会被屏蔽,且在后台运行直到完成,符合你的预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:30:50