如何在Python中与shell交互并获取返回代码

plicqrtu  于 2022-11-25  发布在  Shell
关注(0)|答案(1)|浏览(156)

比如this,它展示了如何与Python中的shell交互,将内容发送到它的stdin,并从它的stdout阅读回内容。
除此之外我还想做一件事:

  • 启动一个运行shell的进程--例如:subprocess.Popen(["powershell --someArgs"])
  • 通过以下方式与shell/进程交互:
  • 通过stdin向其发送临时命令(可能需要一段时间并产生大量输出的命令)
  • 通过stdout使用每个命令输出,
    *确定每个命令完成的时间,并获取每个命令的返回代码,以了解哪些命令成功或失败。

我怀疑没有办法完成最后一部分,除了让shell自己打印它的最后一个返回代码,并让父进程从stdout中解析它(同时,扫描stdout的提示符以了解命令何时完成?)。
代码示例是受欢迎的,但不是必须的--精确的描述应该足够好:-)
(理想情况下,使用subprocess等内置模块,而无需安装任何新的软件包。)

7lrncoxx

7lrncoxx1#

相反,这是最容易的部分。
当子进程终止时,它发送它的退出代码。它是wait方法的返回值

import subprocess
p=subprocess.Popen(['sh', '-c', 'sleep 5 ; exit 12'])
x=p.wait()
print(f'exit code was {x}')

请注意,您并不一定要等待进程完成,您可以在进程完成后“等待”它,并在这期间在python进程中执行其他任务(并行性是您调用子进程的原因之一)

import subprocess
import time
p=subprocess.Popen(['sh', '-c', 'sleep 5 ; exit 12'])
time.sleep(10) # or anything else. The point is `.wait` is called after the process has returned
x=p.wait()
print(f'exit code was {x}')

相关问题