2012-08-01 13 views
15

के अंदर stdout और stderr को पुनर्निर्देशित करना मैं एक स्क्रिप्ट के आउटपुट को किसी भिन्न प्रोग्राम पर रीडायरेक्ट करना चाहता हूं। कुछ मैं सामान्य रूप से इन दो रूपों का उपयोग कर करना होगा:मेकफ़ाइल नियम

[Makefile] 
test: 
    python test.py 2>&1 | pyrg [doesn't work] 

मुझे लगता है कि काम करता है एक स्क्रिप्ट फ़ाइल लेखन से बचने के लिए चाहते हैं:

python test.py 2>&1 | pyrg 
python test.py |& pyrg 

मेरे समस्या यह है कि यह एक makefile अंदर से काम नहीं करता है ।

संपादित करें:

python test.py 2>&1 | tee test.out // Writes to the file both stderr and stdout 
cat test.out | pyrg    // Works fine! 
python test.py 2>&1 | pyrg   // pyrg behaves as if it got no input 

यह मेरे लिए एक बुरा समाधान के रूप में मैं कभी नहीं एक परीक्षण विफलता के मामले में cat भाग के लिए मिलता है (सब कुछ है:

यह एक pyrg मुद्दे की तरह लगता है मेकफ़ाइल नियम के अंदर)

+4

यह काम करना चाहिए। 'मेक' पूरी लाइन को व्याख्या के लिए '/ bin/sh' तक पास करती है, इसलिए यह खोल जो कुछ भी है (जिसे आपका उपयोगकर्ता खोल नहीं होना चाहिए) काम को समझ सकता है। –

+2

बिल्कुल यह कैसे काम नहीं करता है? अपने मेकफ़ाइल में कहीं भी 'निर्यात SHELL: =/bin/bash' सेट करने का प्रयास करें। –

+0

दूसरा आदेश चलता है जैसे कि इसे 'stdin' से कोई इनपुट प्राप्त नहीं हुआ। और यह वास्तव में पहले से पहले चलता है। '|' के बजाय '||' का उपयोग करना आदेश को बनाए रखता है लेकिन फिर भी 'pyrg' को इनपुट नहीं मिलता है। – Xyand

उत्तर

3

यह स्पष्ट नहीं करता है कि सीधा दृष्टिकोण क्यों काम नहीं करता है, लेकिन यह चाल करता है:

[Makefile] 
test: 
    python test.py >test.out 2>&1; pyrg <test.out 
8

मैंने इस प्रश्न पर एक ही समस्या के साथ ठोकर खाई और जवाब से संतुष्ट नहीं था। मेरे पास एक बाइनरी TLBN था जो परीक्षण मामले example2.TLBN पर विफल रहा।

यही मेरी फाइल फ़ाइल को पहले देखा गया था।

make: 
    ./TLBN example2.TLBN > ex2_output.txt 

कौन सा मैं उम्मीद कर रहा था और मेकअप प्रक्रिया को रोकने त्रुटि संदेश के साथ विफल रहा है।

make: 
    -./TLBN example2.TLBN > ex2_output.txt 2>&1 

नोट रेखा है जो बताता है stderr के लिए किसी भी उत्पादन की अनदेखी करने के बनाने की शुरुआत में -:

यह मेरा ठीक है।

आशा है कि यह किसी ऐसे व्यक्ति की सहायता करे जिसकी एक समान समस्या है।