Windows 下 commands.getstatusoutput 的错误

发布于:3/15/2022, 2:35:48 PM @孙博
技术分享 | Python,commands.getstatusoutput
许可协议:署名-非商业性使用(by-nc)

最近在改一段 Python 2.7 的老代码,是同事之前在 MacOS 环境开发及使用的,由于需要迁移到 Windows 环境下,我在按部就班的装完各种依赖后,在执行 commands.getstatusoutput 时发现一直会有一个报错:

'{' is not recognized as an internal or external command, operable program or batch file.,也有部分小伙伴遇到的是中文的 '{' 不是内部或外部命令,也不是可运行的程序批处理文件。

由于原来的代码已经执行了好多年,按理说不会是代码写错导致的,于是我就上网查资料,最终找到了一个解决方案。


原因如下(转载自知乎):

因为CPython坚持要让commands模块为Unix-specific而不打算兼容Windows呗。要详细的话,给题主俩传送门:

Issue 772029: Make commands.getstatusoutput work on Windows <- 2003-2004年。注意状态是rejected。

[python-win32] windows friendly commands.getstatusoutput <- 2008年。大概没人理?

作者:RednaxelaFX
链接:https://www.zhihu.com/question/33956957/answer/57584358
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


解决方法如下(转载自开源中国,原文有修改):

首先删除 commands.pyc,然后将 commands.py 备份一下,并按照下述方案修改:

# C:\Python27\Lib\commands.py

# 将代码中出现的 os.popen 进行如下修改(共两处)。
# pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
pipe = os.popen(cmd, 'r')

保存后即可在 Windows 下正常使用 commands.getstatusoutput 方法。