【问题标题】:Python os.popen returns 68864 errorPython os.popen 返回 68864 错误
【发布时间】:2013-10-13 20:56:10
【问题描述】:

我正在编写一个 python 程序来自动化某些 windows 命令,这应该会导致创建一个我可以在虚拟框中执行的 iso 文件。

有4个命令,最后是“mkisofs -no-emul-boot -boot-load-size 4 -o filename.iso -b filename.flp cdiso/”

我使用 os.popen 来执行命令,我发现除了最后一个命令之外的所有东西都可以正常工作。

从返回的对象中,我只能得到状态码 68864。我知道它不起作用,因为 Virtual box 在尝试加载 iso 文件时返回错误。

这里可能出了什么问题?

谢谢!

【问题讨论】:

  • 您在处理哪个操作系统(基本环境和虚拟环境)?
  • 我正在运行 Windows 7。虚拟的是我自己编写并执行的新操作系统文件。为此,我通常需要在 Windows 命令提示符下执行 4 个不同的命令,我正在尝试将其自动化。

标签: python-2.7


【解决方案1】:

IIRC,popen 返回的错误与system() 库调用相同。要提取实际错误,您必须使用 WEXITSTATUS 宏。

幸运的是,您可以通过 os.WEXITSTATUS 获得此功能。

>>> import os
>>> os.WEXITSTATUS(68864)
13

我不确定这意味着什么,它可能会在终止之前向控制台打印一些错误。您是否尝试手动运行该程序?

一个疯狂的猜测是这个13 数字实际上是导致失败的errno。如果是这样的话,那么:

>>> os.sterror(13)
'Permission denied'

【讨论】:

  • 我正在运行 Windows,但 WEXITSTATUS 在 Windows 上似乎不可用。
  • 我也手动运行过它,它工作正常。我认为这是每个命令行指令是否可以像这样在python中执行的问题。
  • @SachinCNambiar:哦,对,这实际上在os.posix 中,但在POSIX 系统上重新导入到os 中。在 Windows 中,进程的退出代码应该直接返回,但我担心你无论如何都会得到 Linux 退出代码转换(cygwin、mingw 或类似的东西)。对不起,但我无法提供进一步的帮助......除了建议您使用优秀的Process Monitor
  • 非常感谢您推荐 ProcMon。最后我能够找出问题所在。我比较了直接执行和通过 python 的 procmon 日志。我发现直到某一点看起来都一样,之后 mkisofs 进程在由 python 运行时被关闭。我从 google 发现,mkisofs 中存在一个错误,即每次遇到没有写入权限的文件时,它都会退出,而不是发出警告并继续。所以我改变了 mkisofs 的属性,让它“以管理员身份运行”就可以了。感谢您的宝贵时间
猜你喜欢
  • 2011-10-28
  • 1970-01-01
  • 2013-07-28
  • 2016-01-06
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多