python - python子进程如何尊重powershell退出代码?

标签 python powershell popen

在我的根目录下

$ cat pssa.py
import subprocess,sys
p = subprocess.Popen(["powershell.exe",".\\pre-commit.ps1"],
    stdout=sys.stdout,stderr=sys.stderr,shell=True)
p.communicate()

pre-commit.ps1 返回 1,所以出错了,但是

python pssa.py

返回 0。

请原谅我们完全缺乏 python 技能,但我被困住了。感谢您帮助建议 python pssa.py 如何从 powershell 脚本返回错误代码。

我想我在某处读到 Popen 不等待脚本完成。那么 1) 是否有另一种方法可以等待,然后可以从 powershell 读取返回码?

Python 安装在 Windows 上。上面的想法是能够使用,例如,预提交在 Windows 上有意义地运行。现在,预提交运行会执行 powershell 脚本,但不会像我希望的那样失败。

最佳答案

Popen.communicate等待子进程完成并在 Popen 中填充 returncode。你可以像这样使用它:

import subprocess, sys
p = subprocess.Popen(["powershell.exe",".\\pre-commit.ps1"],
    stdout=sys.stdout,stderr=sys.stderr,shell=True)
outs, errs = p.communicate()
code = p.returncode

关于python - python子进程如何尊重powershell退出代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74702642/

相关文章:

python - Django Rest Framework 更新嵌套的 m2m 对象。有谁知道更好的方法?

python - 如何在链表中的另一个节点之间插入一个节点?

powershell - 如果耗时太长,如何修改PowerShell作业的输出

python - 如何在不使用原始字符串的情况下将 `sed` 命令传递给 `popen`?

python - 需要以列表形式获取输出,而不是 Popen 或任何其他系统命令中的字符串

python - 在 popen 调用中扩展/替换变量

python - 如何用python打开一个mp4文件?

networking - 在 PowerShell 中检查网络服务器上的 IP 地址开关的好方法是什么?

powershell - 在 Powershell 中设置 InheritanceFlags 与 PropagationFlags

python - 在字典中填充字典