2011-12-12 6 views
6

の中で "apt-get install xxx"を使用しています。現在、OSに従って、aptまたはrpmを使用してパッケージをインストールする必要があります。 私はシステムを更新またはアップグレードするためにlib "apt"を見ましたが、それを使って単一のパッケージをインストールすることは可能ですか?Pythonスクリプト

私も「サブプロセス」を使用しようとしていた。

subprocess.Popen('apt-get install -y filetoinstall', shell=True, stdin=None, stdout=None, stderr=None, executable="/bin/bash") 

をしかし、このコマンドはシェル内のすべてのプロセスを示して、私はそれを隠すことはできません。

ありがとうございました。/dev/nullに出力をリダイレクトする

+0

正しくフォークされていないようです。あなたは文書を読もうとしましたか? – bvd

+0

Python 3.5+の場合は、['subprocess.run()'](https://docs.python.org/3/library/subprocess.html#subprocess.run)を参照してください – phoenix

答えて

10

subprocessライブラリのcheck_callを使用できます。

from subprocess import STDOUT, check_call 
import os 
check_call(['apt-get', 'install', '-y', 'filetoinstall'], 
    stdout=open(os.devnull,'wb'), stderr=STDOUT) 

stdout/dev/nullにダンプ、またはこの場合os.devnull

os.devnullは、プラットフォームに依存しており、同様に、この特定のタスクのために

+0

ありがとうラッセル! –

+0

@Cirux - あなたは大歓迎です。 –

+0

ありがとう!私は各ソリューションの一部を使います。私のコード: proc = subprocess.Popen( 'apt-get install -y FILE'、shell = True、stdin =なし、stdout = open(os.devnull、 "wb")、stderr = STDOUT、executable = "/bin/bash ") proc.wait() 追加:stdoutと。 は、あなたが共有しているリンクは、このを与えるあなたに1つのより多くの時間 –

0

使用この:apt-getのが完了するまで

proc = subprocess.Popen('apt-get install -y filetoinstall', shell=True, stdin=None, stdout=open("/dev/null", "w"), stderr=None, executable="/bin/bash") 
proc.wait() 

コールが(.WAITする)がブロックされます。

+0

ああありがとうございます。どうすればプログラムを停止できますか、インストールが完了するのを待って、いつインストールされ、他の機能とprocced? –

+0

あなたのために私の答えを更新しました。 –

+0

ねえ、アルゼンチンから大変ありがとう! –

3

を(あなたはまだ良い:)知って、apt-getを使用しますがしているので、関連はありません)、Windows上でPOSIXとnul/dev/nullを返します。 subprocessの代わりに、ビルドを自動化するPythonデプロイメントツールFabricの使用を検討することもできます。

+0

ありがとう待つ: あなたがこのページを閲覧するための適切な権限を持っていない アクセス許可が拒否されました。許可を求めるには、このプロジェクトの所有者に連絡してください。 – Ayush

+0

@Ayush:link updated –

+0

ありがとうございました。 – Ayush

2

ありがとうございました!私は各ソリューションの一部を使います。私のコード:

proc = subprocess.Popen('apt-get install -y FILE', shell=True, stdin=None, stdout=open(os.devnull,"wb"), stderr=STDOUT, executable="/bin/bash") 
proc.wait() 

を追加しました:stdoutと

を.WAITアルゼンチンからあなたに1つのより多くの時間をありがとうございました!