我父亲正在开发一个程序,除其他外,需要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'],
)