subprocess.Popen 冻结

subprocess.Popen freezes up

我正在使用 subprocess.Popen 通过 Python 启动外部程序。 具体来说 Python Cinema 4D 中的 2.6。

它在 Windows 上工作正常,但我在 mac osx.

上遇到问题
cmd = ['filepath']
p = subprocess.Popen(cmd, shell=False, bufsize=0, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds = False)
pickle.dump(data, p.stdin)
output, error_output = p.communicate()

这会反复出现,直到我重新启动 C4D,然后它就冻结了所有内容。然后我需要在 mac 上做 'Force Quit'。要重置它以便它再次工作,我必须删除 'filepath' 所在的目录,并让 python 在 subprocess.Popen 运行s 时抛出找不到文件的错误。一旦我这样做了,我就可以再次重复启动我的子进程程序,直到我再次重新启动 C4D。那么,问题returns.

close_fds 被设置为 'False' 因为在 Windows 上管道重定向需要那样做,但在 mac 上也许应该设置至 'True'.

现在的问题是,即使我重新启动计算机,'subprocess.Popen' 甚至不会从 C4D 中的 'Console' 运行。它只是冻结了一切。为什么重新启动不重置所有内容?我应该怎么做才能让一切恢复正常?

即使这个抛出文件未找到错误的测试也会冻结。

import subprocess
subprocess.Popen(["test1"])

求助!

经过无休止的测试以缩小问题范围,现在看来 C4D (Cinema 4D) 中有一个错误会冻结整个程序,包括它的 python 2.6,如果在以下情况下,您尝试使用 'subprocess.Popen' 和其他 Python 命令,例如 'subprocess.call()': 如果您的插件包含某些动态库,并且它们与您的插件一起放置在 C4D 'plugins' 文件夹。它们可以放在 'plugins' 文件夹旁边或上方的文件夹中,但不能嵌套在其中的任何位置。

此问题似乎只存在于 Mac 版本的 C4D 中。 C4D 一定是在扫描 'plugins' 文件夹,并且对里面存在的动态库感到困惑。这显然是一个错误,因为开发人员应该能够在他们的插件中放置任何东西。已报告给 Maxon。