துணை செயலாக்க முறையைப் பயன்படுத்தி பைத்தானில் ஷெல் கட்டளைகளை எவ்வாறு செயல்படுத்துவது

How Execute Shell Commands Python Using Subprocess Run Method



துணை செயல்முறை என்பது ஒரு உள்ளமைக்கப்பட்ட பைதான் தொகுதி ஆகும், இது புதிய செயல்முறைகளை உருவாக்கவும் அவற்றின் உள்ளீடு மற்றும் வெளியீட்டு தரவு ஸ்ட்ரீம்களுடன் தொடர்பு கொள்ளவும் பயன்படுகிறது. எளிமையான சொற்களில், ஷெல் கட்டளைகளை இயக்கவும் லினக்ஸ் கோப்பு முறைமை முழுவதும் பொதுவாக பல்வேறு பின் கோப்புறைகளில் சிதறி இயங்கக்கூடிய பைனரிகளை இயக்கவும் இதைப் பயன்படுத்தலாம். இயங்கக்கூடிய பைனரிக்கு நீங்கள் முழு பாதையையும் வழங்கலாம் மற்றும் பைனரியுடன் தொடர்புடைய எந்த கட்டளை வரி சுவிட்சுகளையும் பயன்படுத்தலாம். பைதான் பயன்பாடுகளில் துணை செயலாக்க தொகுதியையும் அதன் இயக்க முறையையும் எவ்வாறு பயன்படுத்துவது என்பதை இந்த கட்டுரை விளக்கும். கட்டுரையில் உள்ள அனைத்து குறியீடு மாதிரிகள் உபுண்டு 20.04 இல் பைதான் 3.8.2 உடன் சோதிக்கப்பட்டது.

துணை செயல்முறை. ஓடும் முறை

Subprocess.run முறை வாதங்களின் பட்டியலை எடுக்கும். முறை அழைக்கப்படும் போது, ​​அது கட்டளையை செயல்படுத்துகிறது மற்றும் செயல்முறை முடிவடையும் வரை காத்திருக்கிறது, இறுதியில் ஒரு முழுமையான செயலாக்கப் பொருளைத் தருகிறது. நிறைவுசெய்யப்பட்ட செயல்முறை பொருள் stdout, stderr, முறையை அழைக்கும்போது பயன்படுத்தப்படும் அசல் வாதங்கள் மற்றும் திரும்பும் குறியீட்டை வழங்குகிறது. Stdout என்பது கட்டளையால் உருவாக்கப்பட்ட தரவு ஸ்ட்ரீமை குறிக்கிறது. பூஜ்ஜியமல்லாத திரும்பக் குறியீடு (வெளியேறும் குறியீடு) என்பது subprocess.run முறையில் செயல்படுத்தப்படும் கட்டளையில் பிழையைக் குறிக்கும்.







எடுத்துக்காட்டு 1: Subprocess.run முறையைப் பயன்படுத்தி ஒரு உரை கோப்பின் வெளியீடு உள்ளடக்கங்கள்

கீழே உள்ள கட்டளை data.txt கோப்பின் உள்ளடக்கங்களை வெளியிடும், அதில் ஒரு பெயர் = ஜான் சரம் உள்ளது என்று கருதுகிறது.



இறக்குமதி துணை செயல்முறை
துணை செயல்முறை.ஓடு(['பூனை', 'data.txt'])

மேலே உள்ள குறியீட்டை இயக்குவது பின்வரும் வெளியீட்டை வழங்கும்:



பெயர்=ஜான்
முடிக்கப்பட்ட செயல்முறை(வாதிடுகிறார்=['பூனை', 'data.txt'],திரும்ப குறியீடு=0)

பட்டியல் வாதத்தின் முதல் உறுப்பு செயல்படுத்தப்பட வேண்டிய கட்டளையின் பெயர். முதல் உறுப்பைப் பின்பற்றும் பட்டியலில் உள்ள எந்த உறுப்பும் கட்டளை வரி விருப்பங்கள் அல்லது சுவிட்சுகளாகக் கருதப்படும். விருப்பங்களை வரையறுக்க நீங்கள் ஒற்றை கோடு மற்றும் இரட்டை கோடுகளைப் பயன்படுத்தலாம். எடுத்துக்காட்டாக, ஒரு கோப்பகத்தில் கோப்புகள் மற்றும் கோப்புறைகளை பட்டியலிட, குறியீடு subprocess.run ([ls, -l] ஆக இருக்கும். இவற்றில் பெரும்பாலானவற்றில், ஒரு ஷெல் கட்டளையில் இடம் -பிரிக்கப்பட்ட எந்த வாதத்தையும் ஒரு தனி உறுப்பாக நீங்கள் கருதலாம். subprocess.run முறைக்கு வழங்கப்பட்ட பட்டியல்.





எடுத்துக்காட்டு 2: Subprocess.run முறையின் வெளியீட்டை அடக்கு

Subprocess.run முறையின் வெளியீட்டை அடக்க, நீங்கள் stdout = subprocess.DEVNULL மற்றும் stderr = subprocess.DEVNULL ஆகியவற்றை கூடுதல் வாதங்களாக வழங்க வேண்டும்.

இறக்குமதி துணை செயல்முறை

துணை செயல்முறை.ஓடு(['பூனை', 'data.txt'],stdout=துணை செயல்முறை.பரிணாமம்,
stderr=துணை செயல்முறை.பரிணாமம்)

மேலே உள்ள குறியீட்டை இயக்குவது பின்வரும் வெளியீட்டை உருவாக்கும்:



முடிக்கப்பட்ட செயல்முறை (args = ['cat', 'data.txt'], returncode = 0)

எடுத்துக்காட்டு 3: Subprocess.run முறையின் வெளியீட்டைப் பிடிக்கவும்

Subprocess.run முறையின் வெளியீட்டைப் பிடிக்க, capture_output = உண்மை என்ற கூடுதல் வாதத்தைப் பயன்படுத்தவும்.

இறக்குமதி துணை செயல்முறை
வெளியீடு= துணை செயல்முறை.ஓடு(['பூனை', 'data.txt'],பிடிப்பு_ வெளியீடு=உண்மை)
அச்சு (வெளியீடு)

மேலே உள்ள குறியீட்டை இயக்குவது பின்வரும் வெளியீட்டை உருவாக்கும்:

முடிக்கப்பட்ட செயல்முறை(வாதிடுகிறார்=['பூனை', 'data.txt'],திரும்ப குறியீடு=0,
stdout=bபெயர் = ஜான் n',stderr=b'')

நீங்கள் தனிப்பட்ட முறையில் stdout மற்றும் stderr மதிப்புகளை output.stdout மற்றும் output.stderr முறைகளைப் பயன்படுத்தி அணுகலாம். வெளியீடு ஒரு பைட் வரிசையாக தயாரிக்கப்படுகிறது. ஒரு சரத்தை வெளியீடாகப் பெற, output.stdout.decode (utf-8) முறையைப் பயன்படுத்தவும். சப் வடிவத்தில் வெளியீட்டைப் பெறுவதற்கு நீங்கள் subprocess.run அழைப்புக்கு கூடுதல் வாதமாக உரை = உண்மை வழங்கலாம். வெளியேறும் நிலை குறியீட்டைப் பெற, நீங்கள் output.returncode முறையைப் பயன்படுத்தலாம்.

எடுத்துக்காட்டு 4: Subprocess.run முறையால் செயல்படுத்தப்பட்ட கட்டளை தோல்வி குறித்த விதிவிலக்கை உயர்த்தவும்

கட்டளை பூஜ்ஜியமற்ற நிலையுடன் வெளியேறும் போது ஒரு விதிவிலக்கை உயர்த்த, காசோலை = உண்மை வாதத்தைப் பயன்படுத்தவும்.

இறக்குமதி துணை செயல்முறை
துணை செயல்முறை.ஓடு(['பூனை', 'data.tx'],பிடிப்பு_ வெளியீடு=உண்மை,உரை=உண்மை,காசோலை=உண்மை)

மேலே உள்ள குறியீட்டை இயக்குவது பின்வரும் வெளியீட்டை உருவாக்கும்:

CalledProcessError ஐ உயர்த்தவும் (retcode, process.args,
subprocess.CalledProcessError: கட்டளை '[' cat ',' data.tx ']'
பூஜ்ஜியமற்ற வெளியேறும் நிலை 1 க்கு திரும்பியது.

எடுத்துக்காட்டு 5: Subprocess.run முறையால் செயல்படுத்தப்படும் கட்டளைக்கு ஒரு சரத்தை அனுப்பவும்

உள்ளீடு = 'சரம்' வாதத்தைப் பயன்படுத்தி subprocess.run முறையால் செயல்படுத்தப்படும் கட்டளைக்கு ஒரு சரத்தை நீங்கள் அனுப்பலாம்.

இறக்குமதி துணை செயல்முறை
வெளியீடு= துணை செயல்முறை.ஓடு(['பூனை'], உள்ளீடு='data.txt',பிடிப்பு_ வெளியீடு=உண்மை,
உரை=உண்மை,காசோலை=உண்மை)
அச்சு (வெளியீடு)

மேலே உள்ள குறியீட்டை இயக்குவது பின்வரும் வெளியீட்டை உருவாக்கும்:

முடிக்கப்பட்ட செயல்முறை (args = ['cat'], returncode = 0, stdout = 'data.txt', stderr = '')

நீங்கள் பார்க்கிறபடி, மேலே உள்ள குறியீடு data.txt ஐ ஒரு சரமாக அனுப்பும், கோப்பு பொருளாக அல்ல. Data.txt ஐ ஒரு கோப்பாக அனுப்ப, stdin வாதத்தைப் பயன்படுத்தவும்.

உடன் திறந்த('data.txt') எனf:
வெளியீடு= துணை செயல்முறை.ஓடு(['பூனை'],ஸ்ட்டின்=எஃப்,பிடிப்பு_ வெளியீடு=உண்மை,
உரை=உண்மை,காசோலை=உண்மை)
அச்சு (வெளியீடு)

மேலே உள்ள குறியீட்டை இயக்குவது பின்வரும் வெளியீட்டை உருவாக்கும்:

முடிக்கப்பட்ட செயல்முறை (args = ['cat'], returncode = 0, stdout = 'name = John n', stderr = '')

எடுத்துக்காட்டு 6: Subprocess.run முறையைப் பயன்படுத்தி ஷெல்லில் கட்டளையை நேரடியாக இயக்கவும்

பிரதான கட்டளையில் ஒரு சரம் பிளவு மற்றும் அதைப் பின்பற்றும் விருப்பங்களைப் பயன்படுத்துவதற்குப் பதிலாக, ஒரு கட்டளையை நேரடியாக ஷெல்லில் இயக்க முடியும். இதைச் செய்ய, நீங்கள் கூடுதல் வாதமாக ஷெல் = உண்மை அனுப்ப வேண்டும். இருப்பினும், பைத்தான் டெவலப்பர்களால் ஷெல் = ட்ரூ பயன்படுத்துவது பாதுகாப்பு பிரச்சினைகளுக்கு வழிவகுக்கும் என்பதால் இது ஊக்கமளிக்கவில்லை. இதிலிருந்து பாதுகாப்பு தாக்கங்களைப் பற்றி நீங்கள் மேலும் படிக்கலாம் இங்கே .

இறக்குமதி துணை செயல்முறை
துணை செயல்முறை.ஓடு('cat' data.txt '',ஷெல்=உண்மை)

மேலே உள்ள குறியீட்டை இயக்குவது பின்வரும் வெளியீட்டை உருவாக்கும்:

பெயர் = ஜான்

முடிவுரை

பைத்தானில் உள்ள subprocess.run முறை மிகவும் சக்தி வாய்ந்தது, ஏனெனில் இது பைத்தானுக்குள் ஷெல் கட்டளைகளை இயக்க அனுமதிக்கிறது. தனித்தனி கோப்புகளில் கூடுதல் ஷெல் ஸ்கிரிப்ட் குறியீட்டை வைத்திருக்க வேண்டிய அவசியமின்றி அனைத்து குறியீடுகளையும் பைத்தானுக்கு மட்டுப்படுத்த இது உதவுகிறது. எவ்வாறாயினும், ஒரு மலைப்பாம்பு பட்டியலில் ஷெல் கட்டளைகளை சரியாக டோக்கனைஸ் செய்வது மிகவும் தந்திரமானதாக இருக்கலாம். எளிய ஷெல் கட்டளைகளை டோக்கனைஸ் செய்ய நீங்கள் shlex.split () முறையைப் பயன்படுத்தலாம், ஆனால் நீண்ட, சிக்கலான கட்டளைகளில் - குறிப்பாக குழாய் சின்னங்கள் கொண்டவை - shlex கட்டளையை சரியாகப் பிரிக்கத் தவறிவிட்டது. இதுபோன்ற சந்தர்ப்பங்களில், பிழைத்திருத்தம் ஒரு தந்திரமான பிரச்சினையாக இருக்கலாம். இதைத் தவிர்க்க நீங்கள் ஷெல் = உண்மை வாதத்தைப் பயன்படுத்தலாம், ஆனால் இந்தச் செயலுடன் தொடர்புடைய சில பாதுகாப்பு கவலைகள் உள்ளன.