質問の2番目の部分に答える
(コメントボックスが小さすぎて申し訳ありません)
ポールホフマン、あなたは正しいです、私は組み込み関数を扱っているあなたの質問の一部だけに対処しました、しかしそれが処理できなければそれは価値のあるスクリプト言語ではないでしょうapt-get。推奨されるライブラリは少し冗長ですが、次のような役割を果たします。
>>> apt_get = ['/usr/bin/apt-get', 'install', 'python']
>>> p = subprocess.Popen(apt_get, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> p.wait()
100 # Houston, we have a problem.
>>> p.stderr.read()
'E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)'
'E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?\n'
ただしPopen、これは一般化されたツールであり、便宜上ラップすることができます。
$ cat apt.py
import errno
import subprocess
def get_install(package):
cmd = '/usr/bin/apt-get install'.split()
cmd.append(package)
output_kw = {'stdout': subprocess.PIPE, 'stderr': subprocess.PIPE}
p = subprocess.Popen(cmd, **output_kw)
status = p.wait()
error = p.stderr.read().lower()
if status and 'permission denied' in error:
raise OSError(errno.EACCES, 'Permission denied running apt-get')
# other conditions here as you require
$ python
>>> import apt
>>> apt.get_install('python')
Traceback ...
OSError: [Errno 13] Permission denied running apt-get
そして今、例外処理に戻ります。サブプロセスモジュールのJavaのような過度の一般性についてはコメントしません。