4

我试图通过从子进程中启动它来从python程序运行python脚本(原因是当脚本运行时主程序必须退出,并结合wx.CallAfter和Close)。但是,当脚本运行时,我在第 1 行遇到错误,ImportError: No module named os这让我认为这与 PythonPath 有关,但我可以从终端很好地运行脚本。

为什么脚本以这种方式运行时看不到任何核心模块?

编辑:有问题的行是:

wx.CallAfter(subprocess.Popen,'python %s "%s" %s %s'%(os.path.join(BASE_DIR,"updatecopy.py"),BASE_DIR,pos[0],pos[1]),shell=True)

BASE_DIR 只是脚本所在的目录。

4

2 回答 2

1

subprocess 在那里是因为 os.exec* 已被弃用,所以我不建议像有人建议的那样使用它来代替 Popen 。

从冻结的进程运行时,我已经看到这个问题突然出现。如果是这种情况,那么您很可能为新的 python 进程继承了一个奇怪的环境。

大多数冻结的脚本将尝试从 zip 文件运行,在这种情况下,难怪 Python 找不到任何东西,它都被困在一个 zip 文件中:)

如果是这种情况,请尝试使用您用于运行冻结脚本的 python 可执行文件运行。它应该能够应对特殊环境。

于 2011-12-19T11:17:48.310 回答
0

也许你可以使用os.execv代替 Popen。

来自os/python 文档

这些函数都执行一个新程序,替换当前进程;他们不回来。在 Unix 上,新的可执行文件被加载到当前进程中,并且将具有与调用者相同的进程 ID。错误将报告为 OSError 异常。

强调我的)

于 2011-12-04T21:29:05.370 回答