最近在改一段 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
方法。