我有下面的代碼片段,我跑作爲日常幾項工作的一部分:系統命令VS Perl的子程序
system("cp $keyFile $destinationFile");
system("chown $userID $destinationFile");
system("chmod 400 $destinationFile");
與上面的代碼的問題是,有時,很少,至少的一個上述操作未成功完成,我的工作失敗。如果上述操作之一失敗,但作業失敗仍然可行,但我仍想避免簡單系統命令中失敗的一個。
所以我有以下選擇:
- 使用Perl子程序
File::Copy::copy
,chmod
,chown
而不是系統命令。 - 檢查
system()
命令的返回值。這我已經做了,但並沒有解釋爲什麼它可能會失敗。
是更好/更安全的使用Perl子程序,而不是系統命令。我的工作將總是運行在RHEL5機器[從來沒有Windows]。
還有什麼我可以在這裏做的。我怎樣才能收集有關錯誤的更多信息?
更新:文件名或文件路徑將永遠不會包含空格或怪異字符。他們將從集[a-zA-Z]。
我想你的文件名,絕不會包含可能會改變CP,CHOWN或搭配chmod命令的含義空格或其他奇怪的字符? – mttrb 2012-04-21 06:30:38
@mttrb ...從來沒有。 – 2012-04-21 06:31:23
您可以使用open3捕獲stdout和stderr:http://perldoc.perl.org/IPC/Open3.html。在這裏閱讀faq:http://perldoc.perl.org/perlfaq8.html#How-can-I-capture-STDERR-from-an-external-command%3f – Unos 2012-04-21 07:50:35