首页 >后端开发 >Python教程 >如何正确地将字符串输入传递给`subprocess.Popen`的标准输入?

如何正确地将字符串输入传递给`subprocess.Popen`的标准输入?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-19 06:04:51590浏览

How to Correctly Pass String Input to `subprocess.Popen`'s stdin?

通过 Stdin 将字符串输入传递给 Subprocess.Popen

问题:

传递字符串使用 cStringIO.StringIO 对象进入 subprocess.Popen 的 stdin 参数会产生错误,因为对象缺少必要的 fileno 属性。

解决方案:

要解决此问题,建议使用 Popen 中概述的更简单的方法。沟通()文档。通过设置stdin=PIPE,您可以为stdin创建一个管道,并将字符串输入直接提供给communicate方法。

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())

# Output:
# -> four
# -> five
# ->

附加说明:

对于Python 3.5(编码为 3.6),subprocess.run 允许您传递字符串输入并以单个字符串形式检索输出,从而简化了流程打电话。

from subprocess import run, PIPE

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

# Output:
# -> 0
print(p.stdout)

# Output:
# -> four
# -> five
# -> 

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

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