簡體   English   中英

執行一個C ++程序並使用Perl復制cmd輸出

[英]Execute a C++ program and copy the cmd output using Perl

我正在嘗試編寫一個Perl腳本,該腳本將編譯C ++程序,然后通過傳入所需的值來執行它。 執行之后,我需要在cmd上打印任何內容,以便與示例代碼進行比較。

現在,我的代碼完美地編譯了cpp代碼並正確執行了它,但是在不傳遞值的情況下完成了代碼。 我現在要做的就是使用系統命令

system("cl E:\\checker\\Perl\\temp.cpp");
system("temp.exe");
system("10");
system("20");
system("30");
system("40");
system("50");

C ++代碼是這樣的

cin >> a;
cin >> b;
cin >> c;
cin >> d;
cin >> e;

該代碼正確地編譯和執行,但是以下值(它們是使用cin的C ++代碼的輸入)似乎不起作用

請注意,我正在使用Visual Studio編譯器。 也有人可以告訴我如何將C ++代碼輸出的信息提取到perl數組中進行比較。

您可以使用IPC::Open2在您的Perl腳本和其他程序之間建立雙向通信,例如

use IPC::Open2;
use autodie;
my ($chld_out, $chld_in);
my $pid = open2(
    $chld_out, 
    $chld_in, 
    q(bc -lq)
);
$chld_in->print("1+1\n");
my $answer = <$chld_out>;
print $answer;
kill 'SIGINT', $pid; # I don't believe waitpid() works on Win32. Possibly with Cygwin.

不幸的是,緩沖會使這種方法變得比人們希望的難得多。 您還必須手動等待並獲得子進程。 另一種選擇是使用類似IO::PtyExpect的模塊來創建偽tty環境來模擬用戶交互(但是我相信這兩個僅在Windows的Cygwin環境中有效)。 還有IPC::Run ,它是IPC::Open2/3的功能更全的替代方案。

另請參見: perlipcperlfaq8


system的正確語法是

system('command', 'arg1', 'arg2', ... , 'argn');

或全部作為單個字符串,這允許外殼程序解釋(您可能不需要):

system('command arg1 arg2');

system不捕獲輸出。 而是使用反引號運算符:

my $command_output = `command args`;

或其通用形式qx (如果您分配給一個數組,則輸出將在$/上分割,並一次推送到數組中)。

還有open的管道形式( open my $pipeh, '-|', 'command', 'arg1', ..., 'argn') or die $!; )和readpipe函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM