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

如何通过脚本传入初始值后仍与交互式Python程序终端交互

问题:通过脚本传入初始值并保持程序交互能力

我需要给一个交互式Python程序传入初始输入值,之后仍能继续与程序进行交互。

我的交互式Python程序代码如下:

import sys

print("what's your name?")

sys.stdout.write("> ")
sys.stdout.flush()

for line in sys.stdin:
    line = line.rstrip()

    if line == "q":
        break

    print("hello", line)

    sys.stdout.write("> ")
    sys.stdout.flush()

正常运行该程序时,会循环等待输入:

$ python3 name.py
what's your name?
> tom
hello tom
> john
hello john

我尝试用以下bash脚本传入初始值:

#! /bin/bash

echo "mr. big" | python3 name.py

但运行后程序会立即退出,输出如下:

$ ./script
what's your name?
> hello mr. big
> $

解决方案

问题出在echo "mr. big"只输出一行就结束了,导致Python程序的sys.stdin读取到EOF后直接退出循环。要实现先传入初始值,再保持终端交互,需要让脚本先输出初始值,再持续读取终端的输入并传给Python程序。

修改后的bash脚本如下:

#! /bin/bash

{ echo "mr. big"; cat; } | python3 name.py

原理说明

  • echo "mr. big":先输出初始输入值,传给Python程序
  • cat:持续从标准输入(终端)读取内容,直到用户按下Ctrl+D触发EOF,或者在Python程序中输入q退出
  • 用{ ...; }将两个命令组合,把它们的输出一起通过管道传给Python程序

运行修改后的脚本,就能先自动输入mr. big,之后继续和程序交互:

$ ./script
what's your name?
> hello mr. big
> alice
hello alice
> q
$

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:39:53