2010-02-09 12 views
8

मुझे लिनक्स मशीनपायथन का उपयोग कर नेटवर्क निर्देशिका कैसे माउंट करें?

पर पायथन का उपयोग करके नेटवर्क मशीन "डेटा" पर एक निर्देशिका "डीआईआर" माउंट करने की आवश्यकता है, मुझे पता है कि मैं कमांड लाइन के माध्यम से कमांड भेज सकता हूं:

mkdir ~/mnt/data_dir 
mount -t data:/dir/ ~/mnt/data_dir 

लेकिन मैं कैसे उन आदेशों को एक पायथन लिपि से भेजें?

+4

डुप्लिकेट: http://stackoverflow.com/questions/325463/launch-a-shell-command-with-in-a -पीथॉन-स्क्रिप्ट-प्रतीक्षा-के-समाप्ति-और-रेटू –

+0

प्रश्न एक जैसा नहीं है लेकिन उत्तर हैं। –

+0

पुराना सवाल, लेकिन भविष्य के रोमांच के लिए। [Mount.py] (https://github.com/MrVallentin/mount.py) पर एक नज़र डालें। – Vallentin

उत्तर

1

यहाँ एक तरीका है।

HIH

... रिची

+3

एक बेहतर उदाहरण 'subprocess.Popen' का उपयोग करेगा। –

+4

सबसे अच्छा उदाहरण 'subprocess.check_call' का उपयोग करेगा। –

2

उदाहरण subprocess मॉड्यूल का उपयोग कर:

import subprocess 

subprocess.Popen(["mkdir", "~/mnt/data_dir", "mount", "-t", "data:/dir/", "/mnt/data_dir"]) 

या

import subprocess 

subprocess.Popen("mkdir ~/mnt/data_dir mount -t data:/dir/ /mnt/data_dir", shell=True) 

दूसरे संस्करण आदेश पर अमल करने खोल उपयोग करता है। अधिकतर स्थितियों में अधिक पढ़ने योग्य और उपयोग करने में आसान होने पर, उपयोगकर्ता द्वारा सबमिट किए गए तर्कों को पारित करते समय इसे टालना चाहिए क्योंकि उन लोगों को खोल इंजेक्शन (यानी इस मामले में mkdir की तुलना में अन्य आदेशों का निष्पादन) हो सकता है।

+1

मुझे विश्वास नहीं है कि आपका पहला उदाहरण काम करेगा। subprocess '~' का विस्तार नहीं करेगा। जब 'खोल = सही' यह विस्तारित होगा, यही कारण है कि आपका दूसरा उदाहरण काम करता है। –

9

मैं आपको subprocess.checkcall का उपयोग करने की सलाह दूंगा।

from subprocess import * 

#most simply 
check_call('mkdir ~/mnt/data_dir', shell=True) 
check_call('mount -t whatever data:/dir/ ~/mnt/data_dir', shell=True) 


#more securely 
from os.path import expanduser 
check_call([ 'mkdir', expanduser('~/mnt/data_dir') ]) 
check_call([ 'mount', '-t', 'whatever', 'data:/dir/', expanduser('~/mnt/data_dir') ]) 
6

मैं proc के बिना एक chroot में यह करने की कोशिश की

/ # python 
Python 2.7.1 (r271:86832, Feb 26 2011, 00:09:03) 
[GCC 4.4.5] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> from ctypes import * 
>>> libc = cdll.LoadLibrary("libc.so.0") 
>>> os.listdir("/proc") 
[] 
>>> libc.mount(None, "/proc", "proc", 0, None) 
0 
>>> os.listdir("/proc") 
['vmnet', 'asound', 'sysrq-trigger', 'partitions', 'diskstats', 'crypto', 'key-users', 'version_signature', 'kpageflags', 'kpagecount', 'kmsg', 'kcore', 'softirqs', 'version', 'uptime', 'stat', 'meminfo', 'loadavg', 'interrupts', 'devices', 'cpuinfo', 'cmdline', 'locks', 'filesystems', 'slabinfo', 'swaps', 'vmallocinfo', 'zoneinfo', 'vmstat', 'pagetypeinfo', 'buddyinfo', 'latency_stats', 'kallsyms', 'modules', 'dma', 'timer_stats', 'timer_list', 'iomem', 'ioports', 'execdomains', 'schedstat', 'sched_debug', 'mdstat', 'scsi', 'misc', 'acpi', 'fb', 'mtrr', 'irq', 'cgroups', 'sys', 'bus', 'tty', 'driver', 'fs', 'sysvipc', 'net', 'mounts', 'self', '1', '2', '3', '4', '5', '6', '7', '8' .......... 

आप प्रारूप माउंट() फ़ंक्शन नेटवर्क शेयरों के लिए उम्मीद करने के लिए "कोई नहीं" से डिवाइस फ़ाइल को बदलने के लिए सक्षम होना चाहिए रखा होगा। मेरा मानना ​​है कि यह माउंट कमांड के समान है "मेजबान:/पथ/से/डीआईआर"

+1

आप कमाल हैं। – synthesizerpatel

संबंधित मुद्दे

 संबंधित मुद्दे