2015-01-22 54 views
5

Làm cách nào tôi có thể xem đầu ra của lệnh hệ thống. Ví dụ:xem đầu ra của hệ thống() gọi bằng C++

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; 

} 

khi tôi chạy chương trình trong Visual Studio, màn hình màu đen và tôi không thể thấy lệnh đang chạy. Tôi cần nó để tôi có thể xem liệu nó có hiệu quả hay không. Cảm ơn!

+0

Có thể là sự cố chuyển hướng đầu ra. Hàm 'system()' sử dụng trình thông dịch lệnh để chạy chuỗi đối số của hàm 'system()' để nó có thể là trình thông dịch lệnh không kế thừa chuẩn của bạn để đầu ra từ lệnh không đi tới bàn điều khiển cửa sổ. Một điều có thể là các lệnh bạn đang sử dụng không tạo ra bất kỳ đầu ra nào. thử một lệnh khác như lệnh 'echo' để làm một cái gì đó giống như' system ("echo this is output") '. –

+2

Tôi không chắc rằng 'set'-ing (hoặc' cd') với một lệnh gọi đến 'system' sẽ ảnh hưởng đến lời gọi tiếp theo tới' system' (trên POSIX & Linux, tôi chắc chắn nó không hoạt động. Nhưng tôi không không biết Windows). –

+1

Bạn có cân nhắc sử dụng một số API OS (ví dụ: [_chdir] (https://msdn.microsoft.com/en-us/library/bf7fwze1.aspx) ...) thay vì gọi 'hệ thống'? Hoặc sử dụng một số khung công tác như [POCO] (http://pocoproject.org/), [Qt] (http://qt-project.org/) hoặc có thể Tăng cường. –

Trả lời

7

Sử dụng popen thay vì system. Xem ví dụ ở đây 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); 

sau đó

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

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

Đầu ra của cuộc gọi system sẽ hiển thị trên thiết bị xuất chuẩn.

Tôi không nghĩ rằng các lệnh đó thường có bất kỳ đầu ra nào để hiển thị nếu chúng thành công. Hãy thử thêm một thư mục hoặc pwd sau để liệt kê thư mục bạn đang ở.

Nếu bạn muốn lấy đầu ra từ các lệnh vào chương trình để xử lý, đó là một vấn đề khác. Bạn sẽ phải sử dụng api cụ thể của os, hoặc có thể chuyển hướng đầu ra vào một tệp bạn có thể đọc.

+0

Tôi backquoted "hệ thống" kể từ khi một [gọi hệ thống] (https://en.wikipedia.org/wiki/System_call) là một cái gì đó rất khác nhau của chức năng thư viện 'hệ thống' –

0

Hãy thử thêm pause như dưới đây để chờ đợi sau mỗi lệnh. Khi thất bại, thông báo lỗi sẽ được hiển thị. Khi thành công, đầu ra thực tế từ lệnh, nếu có bất kỳ, sẽ được hiển thị.

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

Lưu ý rằng mỗi cuộc gọi đến system sử dụng cmd.exe (như cmd /c [command]) để thực hiện lệnh và env của bạn biến như PATH trong một lệnh sẽ không ảnh hưởng khác.

cmd.exe /c set PATH=%PATH%;C:/Program Files (x86)/myFolder/bin 
cmd.exe /c cd C:/thisfolder/ 
Các vấn đề liên quan