[英]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::Pty
或Expect
的模塊來創建偽tty環境來模擬用戶交互(但是我相信這兩個僅在Windows的Cygwin環境中有效)。 還有IPC::Run
,它是IPC::Open2/3
的功能更全的替代方案。
另請參見: perlipc
和perlfaq8
。
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.