通过python和subprocess.Popen对象运行mpkg安装程序

时间:2012-06-22 13:08:51

标签: python

我正在尝试在UNIX上运行.mpkg安装程序,当我运行此代码时:

p = subprocess.Popen(['/Path/to/File.mpkg'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
return p

输出是这样的:

<subprocess.Popen object at 0x11384xxx>

我的第一个问题是 - 在UNIX上运行mpkg安装程序有更简单的方法吗? 其次 - 我似乎无法弄清楚如何使用subprocess.Popen对象来获益。

1 个答案:

答案 0 :(得分:0)

可悲的是,我不确定mpkg是什么,但有两种选择。

  • 它是一个自运行包,可能是一个shell脚本,类似于有时用于Unix软件的.run格式。在这种情况下,只要您拥有Popen的执行权限(File.mpkg检查),您ls -l /Path/to/File.mpkg的调用就是正确的。安装程序应运行正常。
  • 或者,它旨在由系统工具处理,例如.deb包使用dpkg程序处理。在这种情况下,你需要这样的东西:

    p = subprocess.Popen(['/usr/bin/dpkg', '-i', '/Path/to/File.deb'], ...)
    

    或者,或者:

    p = subprocess.Popen('dpkg -i /Path/to/File.deb', ..., shell=True)
    

现在,您对此Popen对象的操作取决于您想要实现的目标。如果您希望获得流程的输出,则需要拨打Popen.communicate,如下所示:

p = subprocess.Popen(
    ['/Path/to/File.mpkg'],
    stdout=subprocess.PIPE, stderr=subprocess.PIPE,
    stdin=subprocess.PIPE)
(out, err) = p.communicate()

现在out包含标准输出,err标准错误。

如果您只想调用该命令并等到它完成,您还可以使用subprocess.call快捷方式。