从py2exe文件生成进程时Python程序的错误行为

时间:2013-06-07 19:24:01

标签: python multithreading subprocess py2exe

我父亲正在开发一个程序,除其他外,需要ping一台机器。它是多线程的,他构建了一个ping方法,可以在需要时从任何一个线程调用:

def ping_cmd(ip):
    if hasattr(sys.stderr, "fileno"):
        nstderr = sys.stderr
    elif hasattr(sys.stderr, "_file") and hasattr(sys.stderr._file, "fileno"):
        nstderr = sys.stderr._file
    else:
        nstderrPath = "nul"
        nstderr = file(nstderrPath, "a")

    p = subprocess.Popen("ping -n 1 %s" % ip,
                         stdout=subprocess.PIPE,
                         stderr=nstderr,
                         stdin=subprocess.PIPE,
                         shell=True
                        )
    result = p.communicate()[0]
    ...

if-else块语句按照建议编写: http://www.py2exe.org/index.cgi/Py2ExeSubprocessInteractions

使用python从命令行运行时代码工作正常(他测试了它,线程做了几次ping,没有错误),但是我爸爸需要的是使它成为一个Windows可执行文件,所以当他使用 py2exe时发生以下眩晕行为: 第一次调用此方法之后程序退出,即使主线程是无限循环。

它被编译为GUI应用程序,即使它没有接口,因为这很容易使进程在后台运行,我不知道这是否是实现这一目标的最佳方式,但也许它很有用。

我从未使用过py2exe,因为我的大部分工作都是在linux机器上进行的,但在我看来它与使用py2exe进行编译时混合线程与产生进程的组合有关。

py2exe用于编译代码的特定选项:

setup(
options = {"py2exe": {"compressed": 1,
                      "optimize": 2,
                      "ascii": 1,
                      "bundle_files": 1,
                      "includes": ["encodings", "encodings.*"],
                      "packages": ["encodings"]}},
zipfile = None,
name    = "Monit",
windows = ['Monit.py'],
)

0 个答案:

没有答案