मैं एक क्यू से कई नौकरियों को हटाना चाहता हूं। नौकरी हटाने के लिए आदेश qdel JOBid
है। तो यह काम नहीं किया #/usr/bin/env अजगरयह आदेश os.system() के साथ क्यों काम करता है लेकिन subprocess.Popen() नहीं?
import sys, os, subprocess as sp
lo = sys.argv[1]
hi = sys.argv[2]
lo = int(lo)
hi = int(hi)
for i in range(lo,hi):
print "i is %d"%i
p=sp.Popen(['qdel %d'%i],stdout=sp.PIPE)
#os.system('qdel %d'%i)
:
प्रारंभ में, मैं उपप्रक्रिया मॉड्यूल का उपयोग करने की कोशिश की, लेकिन मैं मिल गया एक त्रुटि!। मुझे मिली त्रुटि
Traceback (most recent call last):
File "del.py", line 14, in <module>
p=sp.Popen(['qdel %d'%i],stdout=sp.PIPE)
File "/usr/lib64/python2.6/subprocess.py", line 639, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1228, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
फिर मैंने उपप्रोसेस लाइन पर टिप्पणी की और ओएस का उपयोग किया और यह तुरंत काम किया। मुझे लगता है कि मैं सबप्रोसेस मॉड्यूल
#!/usr/bin/env python
import sys, os, subprocess as sp
lo = sys.argv[1]
hi = sys.argv[2]
lo = int(lo)
hi = int(hi)
for i in range(lo,hi):
print "i is %d"%i
#p=sp.Popen(['qdel %d'%i],stdout=sp.PIPE)
os.system('qdel %d'%i)
उपरोक्त कोड बेकार ढंग से काम करता है। मैं सिर्फ यह जानना चाहता हूं कि सबप्रोसेस मॉड्यूल के फायदे क्यों और क्या हैं। इसके अलावा, मैं एक यूनिक्स खोल
क्या आपको अभी भी 'shell = True' का उपयोग करने की आवश्यकता नहीं होगी? यदि आप 'shell = True' निर्दिष्ट नहीं करते हैं तो तर्कों की सूची में पहला आइटम निष्पादित करने के लिए प्रोग्राम का पथ होने की उम्मीद नहीं है? – smont
@ sc0tt से [execvp' के लिए मैन-पेज] (http://linux.die.net/man/3/execv): फ़ंक्शन 'execlp()' और 'execvp()' के कार्यों को डुप्लिकेट करेगा एक निष्पादन योग्य फ़ाइल की खोज में खोल अगर निर्दिष्ट फ़ाइल नाम में स्लैश (/) वर्ण नहीं है। – aland
@ sc0tt मैंने अपने उत्तर का परीक्षण किया है और यह काम किया है। – ironcyclone