python 的 subprocess 如何像 shell 一样,和终端可以多次交互操作?
python 的 subprocess 如何像 shell 一样,和终端可以多次交互操作?
比如我编写一个这样的 shell 脚本
然后在终端执行
我就能获得一个『交互式』的『东西』
我想用 python 也实现,但是发现不行
import subprocessprocess = subprocess.Popen('/bin/bash', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while True:
cmd = input("$ ")
if cmd == "exit":
break
cmd = cmd.encode('utf-8')
print('cmd',cmd)
process.stdin.write(cmd)
process.stdin.flush()
output = process.stdout.readline().decode('utf-8')
print(output.strip())
输入后就是卡死,没有任何反应,怎么办?
回答:
你的代码的问题可能是你没有在每个命令后面加上换行符,导致bash无法识别命令的结束。你可以尝试在cmd后面加上b’\n’,我改了一下代码,你可以看看:
import subprocessprocess = subprocess.Popen('/bin/bash', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while True:
cmd = input("$ ")
if cmd == "exit":
break
cmd = cmd.encode('utf-8') + b'\n'
print('cmd',cmd)
process.stdin.write(cmd)
process.stdin.flush()
output = process.stdout.readline().decode('utf-8')
print(output.strip())
以上是 python 的 subprocess 如何像 shell 一样,和终端可以多次交互操作? 的全部内容, 来源链接: utcz.com/p/938817.html