【发布时间】:2012-09-21 12:04:27
【问题描述】:
我编写了简单的 python 脚本,它启动 (os.start(path)) 一个批处理文件并等待它在 os.spawnv(os.P_WAIT,bat,()) 之前完成。
问题是它抛出了一个异常:
"exceptions.EOFError:[Errno 10054] 现有连接被远程主机强行关闭"
脚本在 windows 7 64bit 上运行,批处理文件包含简单的命令,如 cd..
代码:
import os
bat = r'C:\new folder\start.bat'
os.spawnv(os.P_WAIT,bat,())
print "ok"
有什么建议吗?
【问题讨论】:
-
改用子流程模块。使用
spawnv时,参数将直接传递给程序而无需shell干预@ -
感谢您的评论。可以举个例子吗?
-
@Munirn:
subprocess.call(r'C:\new folder\start.bat'). -
感谢@MartijnPieters。我使用了 subprocess.call 但脚本没有打开批处理文件并且它没有结束,我跟踪正在运行的代码,在子进程模块中它卡在 INIFINITE: def wait(self): """等待子进程终止. 返回 returncode 属性。""" if self.returncode is None: _subprocess.WaitForSingleObject(self._handle, _subprocess.INFINITE) self.returncode = _subprocess.GetExitCodeProcess(self._handle) return self.returncode
-
pause 会要求一个键,所以它可能会中断输出流,没有完成,可能会触发你提到的异常。如果你去掉暂停,它会起作用吗?
标签: python batch-file operating-system