我正在尝试在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对象来获益。
答案 0 :(得分:0)
可悲的是,我不确定mpkg
是什么,但有两种选择。
.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
快捷方式。