我正在尝试在python中运行一个子进程,这是我代码的一部分:
def update(self):
currentTime = strftime("%d.%m.%y %H:%M", gmtime()) #strftime("%d-%m-%y %H:%M", gmtime)
resultString = "======== " + currentTime + " ========\n\n"
bzrMergeCommand = "cd %s ; /usr/local/bin/bzr merge" % self._directoryName
print "Getting the updated code from bzr..."
mergeResult = sp.Popen(bzrMergeCommand, shell=True, stdout=sp.PIPE, stderr=sp.PIPE, cwd= self._directoryName)
communicated = mergeResult.communicate()
但它无法运行,这是我得到的例外:
'import site' failed; use -v for traceback Traceback (most recent call
last): File "/usr/local/bin/bzr", line 21, in <module>
import os File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py",
line 398, in <module>
import UserDict File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/UserDict.py",
line 84, in <module>
_abcoll.MutableMapping.register(IterableUserDict) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py",
line 109, in register
if issubclass(subclass, cls): File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py",
line 151, in __subclasscheck__
if subclass in cls._abc_cache: File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_weakrefset.py",
line 69, in __contains__
return ref(item) in self.data TypeError: cannot create weak reference to 'classobj' object
我用谷歌搜索并阅读了很多关于“TypeError:无法创建对'classobj'对象的弱引用”: https://stackoverflow.com/questions/7753181/making-my-python-script-executable-causes-a-import-site-failed-use-v-for-tra
在这里:https://github.com/pypa/virtualenv/issues/108
有什么想法吗?
答案 0 :(得分:1)
引发的错误来自bzr,而不是你的脚本。尝试运行python并输入import site如果失败,你的python安装可能会出现问题。
另外,作为一般规则,除非你有理由在Popen中设置shell = True,否则最好设置shell = False。
答案 1 :(得分:0)
看起来问题出在/usr/local/bin/bzr
而不在您的脚本中。尝试从命令行运行bzrMergeCommand
,即不使用脚本。你应该得到同样的错误。
尝试按照链接的StackOverflow问题中的建议编辑/usr/local/bin/bzr
中的shebang。
答案 2 :(得分:0)
正如其他人所说,问题在于Bazaar本身(/ usr / local / bin / bzr),而不是你的脚本。
根据Bazaar website,您需要调整Bazaar以在OS X Lion上使用Python 2.6:
注意:要在OS X Lion(10.7)中使用Bazaar,您应该更改版本 'bzr'脚本用于2.6的Python。你可以用一个 终端中的命令:
sudo sed -i '' s,/usr/bin/python,/usr/bin/python2.6, /usr/local/bin/bzr