当脚本从文件扩展名关联运行时,Windows 7上的python多处理失败

时间:2014-05-30 15:09:27

标签: python windows associations multiprocessing

我有一个相当复杂的大多数python应用程序(我继承),当我在Windows中从文件类型关联运行它(双击资源管理器中的数据文件)时,我在python中间崩溃多处理:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "c:\Python27\lib\multiprocessing\forking.py", line 380, in main
    prepare(preparation_data)
  File "c:\Python27\lib\multiprocessing\forking.py", line 489, in prepare
    file, path_name, etc = imp.find_module(main_name, dirs)
ImportError: No module named MainModule

如果我从Windows命令行运行该应用程序,它会成功运行:

python MainModule.py {full file pathname}

调用进程对象的“start”方法时发生故障。

因为这本身就深藏在python中,所以我很难搞清楚导致这种情况的原因。我已经尝试在工艺对象启动之前将工作目录设置为主模块目录,或者实际上是创建流程对象,但没有任何改进。我还查看了传递给“prepare”的数据的值,但除了原始目录之外,似乎没有任何区别。

任何人都可以建议我应该在哪里和/或如何看待这个?

编辑:

我正在将数据文件与处理它的python应用程序相关联。如果我在与python应用程序主模块相同的目录中的命令行上发出命令,它就可以工作。如果我尝试通过文件关联发出相同的命令,则会失败。我可以将更改的bat文件与应用程序目录关联,发出一个简单的“cd”命令,打印目录(不知道为什么这是必要的,但似乎是)然后以数据文件作为参数启动应用程序 - 正如协会所做的那样 - 而且它有效。我认为这与python模块搜索路径有关,但不知道是什么......

编辑2:

哇,这很尴尬。问题在于协会(有点)。使用不正确的大写调用调用的脚本...脚本正在成功执行但是当进程尝试fork时,多处理会查找错误的大写文件名并且...找不到它!因此,windows并不关心大写,而Windows上的Python也是如此:它不是用于脚本执行,而是用于进程分叉......

0 个答案:

没有答案