python 的 subprocess 如何像 shell 一样,和终端可以多次交互操作?

python 的 subprocess 如何像 shell 一样,和终端可以多次交互操作?

比如我编写一个这样的 shell 脚本

python 的 subprocess 如何像 shell 一样,和终端可以多次交互操作?

然后在终端执行

python 的 subprocess 如何像 shell 一样,和终端可以多次交互操作?

我就能获得一个『交互式』的『东西』

我想用 python 也实现,但是发现不行

import subprocess

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

python 的 subprocess 如何像 shell 一样,和终端可以多次交互操作?

输入后就是卡死,没有任何反应,怎么办?


回答:

你的代码的问题可能是你没有在每个命令后面加上换行符,导致bash无法识别命令的结束。你可以尝试在cmd后面加上b’\n’,我改了一下代码,你可以看看:

import subprocess

process = 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

回到顶部