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

Oracle Linux 9下Python子脚本调用时input函数无法等待用户输入问题

问题

环境:Oracle Linux 9,Python 3.9
脚本功能:

  • 从指定WHL文件集合为第二个脚本安装依赖
  • 依赖安装完成后启动“动作”脚本(这部分运行正常)

启动第二个脚本的代码如下:

def spawn_config_script_and_die(program, exit_code=0):
    subprocess.Popen(program)
    sys.exit(exit_code)
spawn_config_sript_and_die(['python3', 'confi_script.py', '-H', host_name, '-l', log_level, '-p', config_path])

遇到的问题:
从第一个脚本启动第二个脚本时,第二个脚本里的input()命令不等待用户输入,直接继续执行(如同用户只按了回车);但直接运行第二个脚本时,input()工作正常。尝试启动第二个脚本后立即退出第一个脚本,问题依旧。

解决方案

问题根源是subprocess.Popen默认未将子进程的标准输入、输出、错误流关联到当前交互终端。修改Popen调用,显式绑定流即可解决:

修改后的代码

import subprocess
import sys

def spawn_config_script_and_die(program, exit_code=0):
    subprocess.Popen(program, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr)
    sys.exit(exit_code)
spawn_config_sript_and_die(['python3', 'confi_script.py', '-H', host_name, '-l', log_level, '-p', config_path])

补充方案(更彻底的进程替换)

如果上述方法仍有异常,可以用os.execvp让子进程直接替换父进程,完全继承终端上下文:

import os
import sys

def spawn_config_script_and_die(program, exit_code=0):
    os.execvp(program[0], program)
    sys.exit(exit_code)
spawn_config_sript_and_die(['python3', 'confi_script.py', '-H', host_name, '-l', log_level, '-p', config_path])

原因说明

默认调用Popen时,子进程的标准输入不会连接到用户当前的TTY终端,而是继承父进程的stdin流(父进程脚本的stdin通常非交互状态)。显式指定stdin=sys.stdin等参数后,子进程能直接使用终端的输入输出,input()就能正常等待用户输入了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:43:09