我使用subprocess.Popen使用Python启动了一个外部程序。特别是Python2.6里面的电影4D。
它在Windows上运行得很好,但我在mac上遇到了问题。
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上做‘原力退出’。要重新设置文件以使其再次工作,我必须删除“filepath”所在的目录,并让python在运行subprocess.Popen时抛出一个未找到的文件。一旦我这样做,我可以再次启动我的子进程程序,直到我重新启动C4D。然后,问题又回来了。
close_fds被设置为'False‘,因为在Windows上,管道重定向需要这样做,但是在mac上,它可能应该设置为'True’。
现在的问题是,即使我重新启动计算机,“subprocess.Popen”甚至不会从C4D内部的“控制台”运行。一切都被冻结了。为什么不重新启动所有的东西?我该怎么做才能让事情恢复正常?
即使这个测试抛出一个没有找到错误的文件,也会冻结一切。
import subprocess
subprocess.Popen(["test1"])帮助!
发布于 2015-07-27 20:20:46
经过无数个小时的测试,问题可以被缩小,现在看来C4D (Cinema4D)里面有一个bug,如果你试图在以下情况下使用'subprocess.Popen‘或者其他类似于'subprocess.call()’的命令,它会冻结整个程序,包括它的python2.6:如果你的插件包含某些动态库,它们就会放在C4D‘插件’文件夹中。它们可以放在“plugins”文件夹旁边的文件夹中,也可以放在“plugins”文件夹之上,但不能嵌套在其中的任何地方。
这个问题似乎只存在于Mac版本的C4D上。C4D一定是在扫描“插件”文件夹,并且对里面存在的动态库感到困惑。这显然是一个错误,因为开发人员应该能够在插件中放置任何东西。已经向马克森报告过了。
https://stackoverflow.com/questions/31632134
复制相似问题