पर stdout वापस नहीं करता है मैं पाइथन से निष्पादन योग्य सी चला रहा हूं और यह निष्पादन योग्य कभी-कभी segfaults। जब यह subprocess मॉड्यूल segfaults stdout या stderr में कुछ भी वापस नहीं करता है।पायथन उपप्रोसेसर मॉड्यूल segfault
नमूना कोड:
import subprocess
proc = subprocess.Popen(['./a.out'], stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
print 'out: "%s"' % out
print 'err: "%s"' % err
print proc.returncode
a.out
के लिए स्रोत है:
int main() {
printf("hello world\n");
int x = 1/0;
}
./a.out
के उत्पादन में है:
hello world
Floating point exception
अजगर कोड के उत्पादन में (है लिनक्स में , पायथन 2.7):
out: ""
err: ""
-8
क्या यह क्रैश होने पर निष्पादन योग्य के आउटपुट को प्राप्त करने का कोई तरीका है?
एक स्ट्रिंग संदेश में रिटर्नकोड का अनुवाद करने के लिए एक सामान्य विधि भी अच्छा होगा।
अच्छा समाधान, यदि आप सी कोड को नियंत्रित करते हैं और इसमें 'setvbuf' कॉल जोड़ने और recompile जोड़ने में सक्षम हैं। मैं तीसरे पक्ष के सी कोड को मान रहा था जो इसे संशोधित करने के सवाल से बाहर है। – Celada
ठीक है, अगर आपका तीसरा पक्ष कोड क्रैश होने से पहले अपने स्टडआउट को फ्लश नहीं करता है, तो आप ऐसा नहीं कर सकते हैं। – vy32