我正在尝试在同一环境中运行一系列Shell命令:
相同的导出变量,永久历史记录等
我想在运行下一个命令之前处理每个命令的输出。
查看python subprocess.run和Pexpect.spawn之后,似乎都没有提供这两种功能。
subprocess.run允许我运行一个命令,然后检查输出,但不能为其他命令打开环境。
Pexpect.spawn(“ bash”)允许我在同一个环境中运行多个命令,但是直到EOF才能获得输出;当bash本身退出时。
理想情况下,我想要一个可以同时执行以下操作的界面:
shell = bash.new()
shell.run("export VAR=2")
shell.run("whoami")
print(shell.exit_code, shell.stdout())
# 0, User
shell.run("echo $VAR")
print(shell.stdout())
# 2
shell.run("!!")
print(shell.stdout())
# 2
shell.run("cat file -")
shell.stdin("Foo Bar")
print(shell.stdout())
# Foo Bar
print(shell.stderr())
# cat: file: No such file or directory
shell.close()
答案 0 :(得分:0)
听起来像Popen的情况。您可以指定bufsize
来禁用缓冲(如果有障碍的话)。
链接页面中的示例:
with Popen(["ifconfig"], stdout=PIPE) as proc:
log.write(proc.stdout.read())
还有proc.stdin
用于发送更多命令,还有proc.stderr
。