0

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オブジェクトを自分の利益のために使用する方法を理解できないようです。

4

1 に答える 1

0

悲しいことに、私は何mpkgであるかわかりませんが、2つのオプションがあります。

  • それは自己実行型パッケージであり、おそらくシェルスクリプトで.runあり、Unixソフトウェアで時々使用される形式に似ています。この場合、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ショートカットを使用することもできます。

于 2012-06-22T14:10:03.073 に答える