python可以运行“持久壳”吗

时间:2019-06-02 14:07:22

标签: python shell

我正在尝试在同一环境中运行一系列Shell命令:

相同的导出变量,永久历史记录等

我想在运行下一个命令之前处理每个命令的输出。

查看python subprocess.runPexpect.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()

1 个答案:

答案 0 :(得分:0)

听起来像Popen的情况。您可以指定bufsize来禁用缓冲(如果有障碍的话)。

链接页面中的示例:

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())

还有proc.stdin用于发送更多命令,还有proc.stderr