【问题标题】:python starting batch file containing pause command , throws an exceptionpython启动包含暂停命令的批处理文件,引发异常
【发布时间】: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


【解决方案1】:

要在 Windows 上运行批处理文件,您实际上必须使用带有参数的 os.spawn()subprocess.call() 来模拟类似于以下的命令行:

cmd.exe /c "C:\new folder\start.bat"

cmd.exe/c 参数告诉它执行提供的命令并退出。您还需要在包含嵌入空格字符的任何路径周围加上双引号,如上所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-21
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2014-12-25
    • 2012-05-02
    相关资源
    最近更新 更多