通过 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中文网其他相关文章!