เขียนเอาต์พุตคำสั่งไปยังไฟล์และจับคู่สตริง


0

ฉันใหม่เพื่อ Perl ฉันกำลังเขียนสคริปต์ด้านล่างเพื่อพิมพ์ข้อมูลเวลาการบูตระบบจากคำสั่ง windows systeminfo. ดูปัญหาบางอย่างที่นี่ ฉันได้ผลลัพธ์เช่นนี้

มีคนช่วยฉันได้

use strict;
use warnings;
my $filename = 'sysinfo.txt';
my @cmdout = `systeminfo`;
open(my $cmd, '>', $filename) or die "Could not open file '$filename' $!";
print $cmd @cmdout;
foreach my $file (@cmdout) {
    open my $cmd, '<:encoding(UTF-8)', $file or die;
    while (my $line = <$cmd>) {
        if ($line =~ m/.*System Boot.*/i) {
            print $line;
        }
    }
}

เอาท์พุท:

Died at perl_sysboottime.pl line 8.

บรรทัด 8 คืออะไร
Putnik

คุณกำลังเปิด $ cmd สองครั้ง ไม่มีข้อผิดพลาดจากมุมมอง Perl แต่ค่อนข้างสับสนสำหรับทุกคนที่จะต้องรักษารหัสของคุณ
Putnik

คำตอบ:


0

คุณลืมวงเล็บหรือไม่

open my $cmd, '<:encoding(UTF-8)', $file or die; 

ไปยัง

open (my $cmd, '<:encoding(UTF-8)', $file) or die; 

วงเล็บไม่จำเป็น
Toto

0

คุณกำลังพยายามเปิดแต่ละบรรทัดที่กำหนดโดยคำสั่ง systeminfo พวกเขาไม่ใช่ไฟล์พวกเขาเป็นสายของข้อมูล

สคริปต์ของคุณเวอร์ชันที่มาเยือนอาจเป็น:

use strict;
use warnings;
my @cmdout = `systeminfo`;
foreach my $line (@cmdout) {
    print $line if $line =~ /System Boot/i;
}

หรือถ้าคุณต้องการเก็บข้อมูลไว้ $filename

use strict;
use warnings;
my $filename = 'sysinfo.txt';
my @cmdout = `systeminfo`;
open(my $cmd, '>', $filename) or die "Could not open file '$filename' $!";
print $cmd @cmdout;
foreach my $line (@cmdout) {
    print $cmd $line if $line =~ /System Boot/i;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.