मैं कुछ अजीब व्यवहार मतभेद मिला हैपायथन के सबप्रोसेस.कॉल () और os.system () के बीच, जो सेटगिड से संबंधित प्रतीत होता है। अंतर के कारण पर्ल के टैंट चेक को सबप्रोसेस हो जाता है जब सबप्रोसेस.कोल () का उपयोग किया जाता है, जो कि समस्याएं पैदा करता है क्योंकि मैं करता हूं उन सभी पर्ल लिपियों को संशोधित करने की क्षमता नहीं है, जिनके लिए उन्हें अटैच कोड की आवश्यकता होगी।
उदाहरण, "process.py"
#!/usr/bin/python
import os, subprocess
print "Python calling os.system"
os.system("perl subprocess.pl true")
print "Python done calling os.system"
print "Python calling subprocess.call"
subprocess.call(["perl", "subprocess.pl", "true"])
print "Python done calling subprocess.call"
"Subprocess.pl"
#!/usr/bin/perl
print "perl subprocessn";
`$ARGV[0]`;
print "perl subprocess donen";
आउटपुट - सबप्रोसेस.प्लस के दोनों रन समान होने चाहिए, लेकिन सबप्रोसेस.कॉल () के साथ चलने पर एक टेंट एरर हो जाता है:
mybox> process.py
Python calling os.system
perl subprocess
perl subprocess done
Python done calling os.system
Python calling subprocess.call
perl subprocess
Insecure dependency in `` while running setgid at subprocess.pl line 4.
Python done calling subprocess.call
mybox>
Os.system () कार्यों का उपयोग करते समय, मैं वास्तव में सबप्रोसेस.चेक_कोल () का उपयोग कर रहा हूं क्योंकि यह अधिक फॉरवर्ड-कम्पेटिबल है और इसमें अच्छा व्यवहार है।
कोई भी सुझाव या दस्तावेज जो यह बता सकता है कि ये दोनों अलग क्यों हैं? क्या यह संभव है कि यह मेरे स्थानीय यूनिक्स वातावरण में कुछ अजीब सेटिंग है जो इन व्यवहारों को लागू कर रहा है?
उत्तर:
जवाब के लिए 2 № 1मुझे लगता है कि आपकी त्रुटि पर्ल के साथ है, या जिस तरह से यह हैअपने पर्यावरण के साथ बातचीत। आपकी बैकटिक प्रक्रिया किसी कारण से सेटिग कह रही है। एकमात्र तरीका जो मैं इसे दोहरा सकता हूं, वह / usr / bin / perl (-rwxr-sr-x) पर सेट करना है। [संपादित करें] अजगर सेटग होने के बाद भी ऐसा करता है!
[संपादित करें] मैं भूल गया कि os.system है आपके लिए काम कर रहा है। मुझे लगता है कि यहां केवल प्रासंगिक अंतर है, यह है कि ओएस के साथ पर्यावरण है नहीं उपप्रकार द्वारा विरासत में मिला। प्रत्येक उपप्रकार के वातावरण को देखें, और आप अपने अपराधी को पा सकते हैं।
जवाब के लिए 0 № 2
मेरे लिए ऐसा नहीं होता:
$ python proc.py
Python calling os.system
perl subprocess
perl subprocess done
Python done calling os.system
Python calling subprocess.call
perl subprocess
perl subprocess done
Python done calling subprocess.call
$ python --version
Python 2.5.2
$ perl --version
This is perl, v5.8.8 built for i486-linux-gnu-thread-multi
आपके संस्करण संख्याएं क्या हैं?
आप किस प्रकार के खाते के तहत चल रहे हैं?
संपादित करें:
क्षमा करें, शीर्षक छूट गया - I p "python 2.6 का उपयोग कहीं भी आसान है, इसलिए मुझे इस समस्या को छोड़ना होगा।"
संपादित करें:
तो ऐसा लगता है कि हमने समस्या पर काम किया - अजगर 2.6 बाइनरी पर sgid।
यह देखना भी दिलचस्प होगा कि क्या शेल के साथ उपप्रकार भी समस्या से बचता है