簡體   English   中英

通過python和subprocess.Popen對象運行mpkg安裝程序

[英]Running a mpkg installer through python and subprocess.Popen objects

我正在嘗試在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對象對我有好處。

可悲的是我不確定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快捷方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM