प्रश्न के दूसरे भाग के लिए उत्तर
(खेद टिप्पणी बॉक्स था बहुत छोटा)
पॉल हॉफमैन, आप सही, मैं सिर्फ अपने प्रश्न intrinsics से निपटने का एक हिस्सा संबोधित कर रहे हैं, लेकिन यह यदि यह 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
और अब हम वापस अपवाद संचालन करने के लिए कर रहे हैं। मैं उप-प्रोसेस मॉड्यूल की जावा-जैसी अति-सामान्यता पर टिप्पणी करने से इनकार कर दूंगा।
यह सबसे पोर्टेबल तरीका है और यहां तक कि कुछ और अधिक विदेशी परिस्थितियों में काम करता है, जैसे SELinux रूट विशेषाधिकारों को सीमित करता है। –
यह स्थिति के आधार पर वास्तव में खराब हो सकता है। हम्म लेकिन फ्लोरियन का एक बिंदु है। –
@ लोंगपोक - क्या आप उस परिस्थिति का जिक्र कर रहे हैं जहां उपयोगकर्ता के पास/etc में अनुमतियों का नाम बदल सकता है - लेकिन उस पथ से फ़ाइल को हटाने की क्षमता कम है? यदि आपका यही मतलब है, तो यह निर्धारित करने की कोशिश कर रहा है कि उपयोगकर्ता पहले से कौन सी क्षमताओं को पहले से ही करता है वह मूर्खतापूर्ण है। "लेनदेन" अर्थशास्त्र के लिए अपने कोड को बेहतर बनाने के लिए बेहतर है जहां सी विफल होने पर ए और बी को लुढ़काया जा सकता है। – msw