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

如何使用Python的subprocess.run()通过stdin传入字符串?

用Python的subprocess.run()通过stdin传入字符串的方法

刚好我经常处理这类场景,给你详细说下怎么操作,尤其是给需要stdin输入的程序传"foo"的具体例子。

首先,subprocess.run()提供了非常直接的方式传递stdin输入,核心是利用input参数配合text=True(或者旧版的universal_newlines=True)来简化字符串和字节的转换。

基础示例:调用需要stdin的Python脚本

假设我们有一个简单的脚本test_input.py,它从stdin读取输入并打印:

# test_input.py
received = input("请输入内容: ")
print(f"收到输入: {received}")

现在用subprocess.run()调用它,并传入"foo":

import subprocess

# 调用脚本并传入字符串"foo"
result = subprocess.run(
    ["python", "test_input.py"],
    input="foo",  # 直接传字符串
    text=True,    # 自动处理字符串<->字节的转换
    capture_output=True  # 捕获stdout和stderr,方便查看结果
)

# 打印程序的输出
print(result.stdout.strip())  # 输出:收到输入: foo

调用外部命令的示例

如果是调用系统命令(比如Unix的cat,它会读取stdin并输出),用法完全一致:

import subprocess

# 给cat命令传入"foo"
result = subprocess.run(
    ["cat"],
    input="foo",
    text=True,
    capture_output=True
)

print(result.stdout.strip())  # 输出:foo

注意事项

  • 字节 vs 字符串:如果不设置text=True,你需要把字符串编码成字节串,比如input=b"foo"(默认用utf-8编码)。
  • 多行输入:如果需要传递多行字符串,直接在input里写换行符就行,比如input="foo\nbar\n"。
  • 旧版本Python兼容:Python 3.7之前没有text=True,可以用universal_newlines=True替代,效果是一样的。
  • 捕获输出:如果不需要捕获程序的输出,可以去掉capture_output=True,但如果你想查看程序返回的内容或者错误信息,这个参数很有用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:49:05