python os.popen返回的是字符串对象吗_Python—如何将字符串传递到subprocess.Popen(使用stdin参数)?...

^{}文档:Note that if you want to send data to

the process’s stdin, you need to

create the Popen object with

stdin=PIPE. Similarly, to get anything

other than None in the result tuple,

you need to give stdout=PIPE and/or

stderr=PIPE too.

Replacing os.popen*pipe = os.popen(cmd, 'w', bufsize)

# ==>

pipe = Popen(cmd, shell=True, bufsize=bufsize, stdin=PIPE).stdinWarning Use communicate() rather than

stdin.write(), stdout.read() or

stderr.read() to avoid deadlocks due

to any of the other OS pipe buffers

filling up and blocking the child

process.

所以你的例子可以写成如下: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())

# -> four

# -> five

# ->

在当前的Python 3版本中,您可以使用^{},将输入作为字符串传递给外部命令并获取其退出状态,并在一次调用中将其输出作为字符串:#!/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)

# -> 0

print(p.stdout)

# -> four

# -> five

# ->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值