2014-06-10 7 views
6

मैं एक उपकरण लिख रहा हूं जो पायथन और सी में लिखा गया है। पाइथन स्क्रिप्ट एक कॉन्फ़िगरेशन फ़ाइल पढ़ता है, कुछ सत्यापन करता है सी प्रोग्राम को कई कॉल करता है।पता लगाने में असमर्थ क्या -11 का मतलब कोड

सिस्टम: RHE 5.7, अजगर: 2.7.6, जीसीसी: 4.5.2

बुलाया सी कार्यक्रम के लिए मानकों में से कुछ इनपुट फ़ाइलों के रास्ते हैं। एक ऐसा मामला है जहां कई सी प्रोग्राम आमंत्रणों के लिए इनपुट फ़ाइल पथ समान है। इस मामले में केवल पहला कॉल सफल होता है, और पायथन उपप्रोसेसर मॉड्यूल से रिटर्नकोड '-11' होता है।

मुझे यकीन नहीं है कि इसे कैसे प्रगति करें। शुरुआत के लिए, मुझे प्रलेखन नहीं मिल रहा है कि '-11' का अर्थ निकास स्थिति के रूप में क्या हो सकता है। यह /usr/include/sysexits.h में 'मानक' कोड में प्रतीत नहीं होता है। मुझे लगता है कि कोड को 0xf5 या 245 के रूप में भी व्याख्या किया जा सकता है, क्योंकि निकास कोड मुझे विश्वास है कि वास्तव में 8-बिट मानों पर हस्ताक्षर किए गए हैं।

मैंने सी प्रोग्राम की शुरूआत में डीबग जोड़ा है, जिसे तर्क के साथ बुलाया गया था, लेकिन असफल आमंत्रणों के लिए कुछ भी नहीं दिखाई देता है। मैं समझ सकता हूं कि सी कैसे एक फ़ाइल को फिर से खोलने में असफल हो सकती है जो पिछले आमंत्रण (शायद) पर पढ़ा गया था, लेकिन कोड अब तक भी नहीं मिलता है!

तो, बाहर निकलने वाला कोड कहां से आ रहा है? क्या यह (बैश) पर्यावरण से है जो पाइथन उपप्रोसेसर मॉड्यूल संभवतः सी प्रोग्राम को आमंत्रित करने के लिए उपयोग करता है? सी प्रोग्राम के लिए सी रनटाइम से यह मुख्य तक पहुंचने से पहले भी है?

मुझे लगता है कि मैं 'लूप' को सी में ले जाकर इसे प्रगति कर सकता हूं, ताकि इसे प्रत्येक इनपुट फ़ाइल पथ के लिए केवल एक बार बुलाया जा सके, लेकिन यह अभी भी इस व्यवहार को समझा नहीं सकता है। क्या कोई कृपया बता सकता है कि मैं इस त्रुटि का कारण कैसे निर्धारित कर सकता हूं? धन्यवाद।

(Fwiw) अजगर से फोन:

try: 
    subprocess.check_call(args) 
except subprocess.CalledProcessError as e: 
    print e 

सेल्सियस के लिए प्रवेश:

printf("\n--- swizzle\n\nargs:\n"); 
for (int i = 0; i < argc; i++) printf("- %s\n", argv[ i ]); 

त्रुटि आउटपुट:

Command '[..]' returned non-zero exit status -11 

उत्तर

10

वापसी कोड -11 का अर्थ है "विभाजन गलती"। ऋणात्मक रिटर्न कोड आमतौर पर इसका मतलब है कि प्रक्रिया को सिग्नल द्वारा समाप्त कर दिया गया था। रिटर्न कोड -11 का मतलब है कि यह सिग्नल 11 था, जो सिगसेगवी है।

+1

धन्यवाद। यह इंगित करता है कि सी प्रोग्राम चल रहा है, क्रैश हो रहा है और किसी भी डीबग आउटपुट का उत्पादन करने में असफल रहा है। दरअसल, अगर मैं तर्कों को प्रिंट करता हूं और हमेशा बाहर निकलता हूं तो आउटपुट सभी आमंत्रणों के लिए दिखाई देता है। यह सी में बस एक दुर्घटना है। मुझे लगता है कि मैं इतनी देर तक पाइथन में काम कर रहा हूं कि मैं हर अपवाद के साथ एक पूर्ण स्टैक ट्रेस की उम्मीद कर रहा था। – PatB

+0

मेरे पास एक ही प्रश्न था और उत्तर के लिए धन्यवाद। हालांकि, यह नकारात्मक निकास कोड कहां समझाया गया है ?? मैं Google पर खोज करने की कोशिश कर रहा था लेकिन दस्तावेज़ को नहीं मिला जो इसे समझाता है। – yaobin

+1

@याबिन [यहां] (https://docs.python.org/3/library/subprocess.html#subprocess.Popen.returncode) 'ऋणात्मक मूल्य -एन इंगित करता है कि बच्चे को सिग्नल एन (केवल पॉज़िक्स) द्वारा समाप्त कर दिया गया था । – YvesgereY

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