首页 >后端开发 >Python教程 >如何将字符串作为标准输入传递给 subprocess.Popen?

如何将字符串作为标准输入传递给 subprocess.Popen?

Susan Sarandon
Susan Sarandon原创
2024-12-06 13:04:12585浏览

How to Pass a String as stdin to subprocess.Popen?

将字符串输入传递给 subprocess.Popen

尝试将 StringIO 对象作为标准输入传递给 subprocess.Popen 时遇到的错误表明 StringIO子进程不会将对象识别为有效的类文件对象。要解决此问题并成功将字符串作为标准输入传递,需要首先创建到 Popen 进程的管道。

使用显式管道创建

子进程。 Communications() 文档建议使用 stdin=PIPE 创建一个管道,以将数据发送到进程的 stdin。这可以通过修改代码来实现,如下所示:

import subprocess
from subprocess import Popen, PIPE, STDOUT

p = Popen(['grep', 'f'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
grep_stdout = p.communicate(input=b'one\ntwo\nthree\nfour\nfive\nsix\n')[0]
print(grep_stdout.decode())

此代码创建一个到 grep 进程的管道,允许输入字符串通过 stdin 参数传递。

使用 subprocess.run (Python 3.5 )

对于 Python 3.5 及更高版本, subprocess.run 可用于在单个调用中以字符串形式传递输入并以字符串形式检索输出:

#!/usr/bin/env python3
from subprocess import run, PIPE

p = run(['grep', 'f'], stdout=PIPE,
        input='one\ntwo\nthree\nfour\nfive\nsix\n', encoding='ascii')
print(p.returncode)
print(p.stdout)

此方法提供了显式管道创建方法的简洁替代方法。

以上是如何将字符串作为标准输入传递给 subprocess.Popen?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn