2015-01-22 56 views
5

में कहते हैं। उदाहरण के लिए:देखने निर्गम() मैं एक प्रणाली आदेश के उत्पादन में देख सकते हैं कैसे सी ++

int _tmain(int argc, _TCHAR* argv[]) { 

    system("set PATH=%PATH%;C:/Program Files (x86)/myFolder/bin"); 
    system("cd C:/thisfolder/"); 

    std::cin.get(); 
    return 0; 

} 

यह मुझे एक काली स्क्रीन देना जब मैं दृश्य स्टूडियो में कार्यक्रम चलाने के लिए और मैं कमांड जा रहा रन नहीं देख सकता। मुझे इसकी ज़रूरत है ताकि मैं देख सकूं कि यह काम करता है या नहीं। धन्यवाद!

+0

शायद एक आउटपुट रीडायरेक्शन समस्या। 'प्रणाली()' समारोह आदेश दुभाषिया() 'प्रणाली के तर्क स्ट्रिंग को चलाने के लिए' समारोह तो यह हो सकता है कि आदेश दुभाषिया तो अपने मानक बाहर इनहेरिट नहीं है आदेश से आउटपुट कंसोल के लिए जा रहा नहीं है का उपयोग करता है खिड़की। एक और बात यह हो सकती है कि आपके द्वारा उपयोग किए जा रहे आदेश किसी भी आउटपुट को उत्पन्न नहीं कर रहे हैं। 'echo' कमांड जैसे एक अलग कमांड को आज़माएं, इसलिए' सिस्टम ("यह इको आउटपुट है") जैसे कुछ करें। –

+2

मुझे यकीन है कि 'set'-इंग (या' cd') 'system' करने के लिए एक कॉल के साथ, मुझे यकीन है कि यह काम नहीं करता हूं' system' (इसे POSIX और लिनक्स पर करने के लिए अगली कॉल को प्रभावित करती है नहीं कर रहा हूँ। लेकिन मैं डॉन विंडोज़ नहीं जानते)। –

+1

आप कुछ ओएस एपीआई (जैसे [_chdir] (https://msdn.microsoft.com/en-us/library/bf7fwze1.aspx) ...) के बजाय 'system' बुलाने की उपयोग करने पर विचार किया? या [पीओसीओ] (http://pocoproject.org/), [क्यूटी] (http://qt-project.org/), या शायद बूस्ट जैसे कुछ ढांचे का उपयोग करें। –

उत्तर

7

system के बजाय popen का उपयोग करें। यहाँ उदाहरण देखें https://msdn.microsoft.com/en-us/library/96ayss4b.aspx

char psBuffer[128]; 
FILE *pPipe; 

if((pPipe = _popen("set PATH=%PATH%;C:/Program Files (x86)/myFolder/bin", "rt")) == NULL) 
    exit(1); 

तो

while(fgets(psBuffer, 128, pPipe)) { 
    printf(psBuffer); 
} 

if (feof(pPipe)) 
    printf("\nProcess returned %d\n", _pclose(pPipe)); 
1

system कॉल का आउटपुट स्टडआउट पर दिखाना चाहिए।

मुझे नहीं लगता कि उन आदेशों आम तौर पर किसी भी उत्पादन प्रदर्शित करने के लिए है, तो वे सफल हो जाते है। आप जिस निर्देशिका में हैं, उसकी सूची के बाद एक डीआईआर या पीडब्ल्यूडी जोड़ने का प्रयास करें।

यदि आप प्रसंस्करण के लिए प्रोग्राम में कमांड से आउटपुट प्राप्त करना चाहते हैं तो यह एक और मुद्दा है। आपको ओएस विशिष्ट एपीआई का उपयोग करना होगा, या आउटपुट को उस फ़ाइल में रीडायरेक्ट करना होगा जिसे आप पढ़ सकते हैं।

+0

मैं backquoted एक [सिस्टम कॉल] के बाद से "प्रणाली" (https://en.wikipedia.org/wiki/System_call) 'system' पुस्तकालय समारोह की बहुत अलग कुछ है –

0

के रूप में नीचे pause जोड़ने प्रत्येक आदेश के बाद प्रतीक्षा करने के लिए प्रयास करें। विफलता पर, त्रुटि संदेश प्रदर्शित किया जाएगा। सफलता पर, कमांड से वास्तविक आउटपुट, यदि कोई प्रदर्शित किया जाएगा।

system("set PATH=%PATH%;C:/Program Files (x86)/myFolder/bin & pause"); 
system("cd C:/thisfolder/ & pause"); 

ध्यान दें कि system करने के लिए प्रत्येक कॉल cmd.exe का उपयोग करता है (cmd /c [command] के रूप में) एक आदेश में PATH की तरह अपने आदेश और env चर निष्पादित करने के लिए एक और असर नहीं होगा।

cmd.exe /c set PATH=%PATH%;C:/Program Files (x86)/myFolder/bin 
cmd.exe /c cd C:/thisfolder/ 
संबंधित मुद्दे