2012-03-27 45 views
0

以及我運行此腳本,這是寫做的網站 一些截圖,我也和運行mozrepl創建WWW縮略圖::使用Mozrepl機械化::火狐 - 一些調試試圖

在這裏,我們有文件與一些要求的網址...注意這只是真正列表的一小段 - 真正的列表要長得多。它包含超過3500行和URL

http://www.unifr.ch/sfm 
http://www.zug.phz.ch 
http://www.schwyz.phz.ch 
http://www.luzern.phz.ch 
http://www.schwyz.phz.ch 
http://www.phvs.ch 
http://www.phtg.ch 
http://www.phsg.ch 
http://www.phsh.ch 
http://www.phr.ch 
http://www.hepfr.ch/ 
http://www.phbern.ch 
http://www.ph-solothurn.ch 
http://www.pfh-gr.ch 
http://www.ma-shp.luzern.phz.ch 
http://www.heilpaedagogik.phbern.ch/ 

什麼奇怪的輸出 - 見下文...... 問題:我應該做的更改腳本

爲什麼我與GE以下的小腳本輸出:

#!/usr/bin/perl 

use strict; 
use warnings; 
use WWW::Mechanize::Firefox; 

my $mech = new WWW::Mechanize::Firefox(); 

open(INPUT, "<urls.txt") or die $!; 

while (<INPUT>) { 
     chomp; 
     print "$_\n"; 
     $mech->get($_); 
     my $png = $mech->content_as_png(); 
     my $name = "$_"; 
     $name =~s/^www\.//; 
     $name .= ".png"; 
     open(OUTPUT, ">$name"); 
     print OUTPUT $png; 
     sleep (5); 
} 

看到這裏的好鋪天蓋地的輸出 - 坦率地說我從來沒有thught得到這樣一個有趣的輸出..我有調試整個代碼....見下文,

http://www.unifr.ch/sfm 
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 2. 
http://www.zug.phz.ch 
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 3. 
http://www.schwyz.phz.ch 
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 4. 
http://www.luzern.phz.ch 
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 5. 
http://www.schwyz.phz.ch 
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 6. 
http://www.phvs.ch 
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 7. 
http://www.phtg.ch 
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 8. 
http://www.phsg.ch 
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 9. 
http://www.phsh.ch 
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 10. 
http://www.phr.ch 
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 11. 
http://www.hepfr.ch/ 
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 12. 
http://www.phbern.ch                                         

一些沉思:第一,我認爲這不是一個非常嚴重的錯誤 - 我想我必須調試它,然後它會更好地工作。 其次,我首先想到腳本似乎「超載機器」? 現在我不是很確定:症狀確實看起來很奇怪,但我想這並不是必要的,以至於得出「機器過載」

第三,我想到了必須採取的某些步驟確保問題根本與WWW :: Mechanize :: Firefox有關? 這引出了我對Perl警告意味着什麼以及使用診斷編譯指示以獲得更多解釋的想法:您怎麼看?

print() on unopened filehandle FH at -e line 1 (#2) (W unopened) An I/O operation was attempted on a filehandle that w +as never initialized. 

首先 - 我們需要做一個開放的(),一個的sysopen(),或使+ cket()調用,或呼叫文件句柄包 構造除此之外 - 或者,打印( )關閉文件句柄OUTPUT也給出了很多答案,這些答案會告訴我們,我們沒有使用autodie,也沒有檢查open的返回值。 首先我必須調試,並確保以找到錯誤的用武之地[/ QUOTE]

但一些思索後,我認爲這是值得擁有的所有測試東西 - , 仔細一看什麼你怎麼看待這個想法總是測試使用it.That意味着我們還應該養成使用三個

arg open(): 

open my $fh, '>', $name or die "Can't open file $name : $!"; 
print $fh $stuff; 

良好的習慣之前,爲了確保該文件是開放的 - 我想,我們可以或應該在不使用die(), 的情況下解決此問題,但我們必須手動使用某種方法讓我們知道哪些文件無法創建。在我們的例子,它看起來像所有這些 ....這上面顯示...

更新在選擇你的意思是我需要有存儲圖像的文件名是個好文件名..注:我想本地存儲所有這些。但是,如果我有一個龐大的網址列表,那麼我會得到一個輸出文件的巨大列表。所以我需要有很好的文件名。我們可以反映那些東西和需要在程序中!?

the 最新更新;似乎有一些錯誤機械化 ....我想這樣!

回答

2

我想打印出二進制數據(jpg文件),你必須明確地設置它。 其次,如果你不再需要它,關閉一個文件處理程序,並在打開時「死亡」。 第三個選擇一個好的文件名。

問候,

http://perldoc.perl.org/functions/binmode.html

#!/usr/bin/perl 

use strict; 
use warnings; 
use WWW::Mechanize::Firefox; 

my $mech = new WWW::Mechanize::Firefox(); 

open(INPUT, "<urls.txt") or die $!; 

while (<INPUT>) { 
     chomp; 
     next if $_ =~ m/http/i; 
     print "$_\n"; 
     $mech->get($_); 
     my $png = $mech->content_as_png(); 
     my $name = "$_"; 
     $name =~s#http://##is; 
     $name =~s#/##gis;$name =~s#\s+\z##is;$name =~s#\A\s+##is; 
     $name =~s/^www\.//; 
     $name .= ".png"; 
     open(my $out, ">",$name) or die $!; 
     binmode($out); 
     print $out $png; 
     close($out); 
     sleep (5); 
} 
+0

你好,親愛的user1126070 - THX了很多。我會按照建議去做。我會明確地設置它,並關閉一個文件處理程序,如果我不再需要它,並且你'開啓'就會死亡。通過選擇一個好的文件名,你的意思是我需要有一個文件名來存儲圖像。注意:我想**將它們全部存儲在本地**。但是,如果我有一個龐大的網址列表,那麼我會得到一個**輸出文件**的巨大列表。所以我需要有很好的文件名。我們可以在程序中反映**和需求嗎? 期待聽到。 thx很多 – zero 2012-03-27 07:15:11

+1

'好文件名',我的意思是,消毒他們。刪除'://,/'和其他可能會阻止它們被創建的東西。我添加了一些正則表達式來做到這一點。 – user1126070 2012-03-27 07:52:33

+0

hello user1126070 thx很多的額外提示。你應該得到一個怪物恭喜。問候 – zero 2012-03-27 09:16:29