Chinaunix

标题: [求助]如果一条print语句就可以把内容写在标准输出显示同时写入打开的文件 [打印本页]

作者: brantc    时间: 2011-09-06 14:39
标题: [求助]如果一条print语句就可以把内容写在标准输出显示同时写入打开的文件
如题。

我的情况是:
1. 需要在标准输出打印
2. 同时需要把在标准输出打印的东西写入一个日志文件。

有没有一条语句就可以搞定啊?
不然我总是print STDOUT "SDFADF" 然后又要写一次 print MY_LOG “SDFADF”

谢谢!

我曾尝试了:
1. 先备份STDOUT/STDERR
2. 重定向STDOUT/STDERR到我的日志文件
3. 现在就可以直接print到我的日志文件,但是此时STDOUT/STDERR在终端就没有东西显示了,郁闷。。。
作者: zhlong8    时间: 2011-09-06 15:08
xkdcc 是你的马夹?
作者: Kitaisky    时间: 2011-09-06 15:11
man tee
作者: brantc    时间: 2011-09-06 15:22
本帖最后由 brantc 于 2011-09-06 15:29 编辑

回复 2# zhlong8


    .....  xkdcc是我原来注册过忘了的,昨天不小心登陆进来发了第一贴,然后用brant登陆进来就找不到发的帖子了,不知道怎么没有了。。。
    难度我发错了?
请斑竹指教。。。。
作者: brantc    时间: 2011-09-06 15:23
回复 3# Kitaisky


    感谢!我来man下!
作者: zhlong8    时间: 2011-09-06 15:30
回复  zhlong8


    .....  xkdcc是我原来注册过忘了的,昨天不小心登陆进来发了此贴,然后用b ...
brantc 发表于 2011-09-06 15:22



    那个被系统当垃圾贴给删除了,已经给你恢复。CU 的反垃圾系统对发贴量极少的 ID 很严格而且还有点2
作者: Kitaisky    时间: 2011-09-06 15:37
回复 5# brantc


    # from Perl
  use Tee;       <-----CPAN tee
  tee( $command, @files );

  # from the command line
  $ cat README.txt | ptee COPY.txt
作者: zhlong8    时间: 2011-09-06 15:41
如题。

我的情况是:
1. 需要在标准输出打印
2. 同时需要把在标准输出打印的东西写入一个日志文件。
...
brantc 发表于 2011-09-06 14:39



    将几个句柄打包成个对象,再定义个 report 方法就可以 $fh->report("SFADF"); 这样用了
作者: brantc    时间: 2011-09-06 16:54
那个被系统当垃圾贴给删除了,已经给你恢复。CU 的反垃圾系统对发贴量极少的 ID 很严格而且还有点 ...
zhlong8 发表于 2011-09-06 15:30



    o(╯□╰)o
作者: brantc    时间: 2011-09-06 16:57
将几个句柄打包成个对象,再定义个 report 方法就可以 $fh->report("SFADF"); 这样用了
zhlong8 发表于 2011-09-06 15:41



    嗯,,,,斑竹,我perl的面向对象编程是0经验,可否简单点?或者给我show 几句示例代码嘛?
    真的非常感谢啦~~
作者: brantc    时间: 2011-09-06 17:20
回复  brantc


    # from Perl
  use Tee;
Kitaisky 发表于 2011-09-06 15:37



    我系统不能安装额外的perl模块,所以不能用CPAN的Tee了。。。
作者: jason680    时间: 2011-09-06 17:43
我系统不能安装额外的perl模块,所以不能用CPAN的Tee了。。。
brantc 发表于 2011-09-06 17:20



   sub LOGprint{
     print STDOUT "@_";
     print MY_LOG "@_";
   }

   LOGprint "my message\n";
作者: brantc    时间: 2011-09-08 10:59
sub LOGprint{
     print STDOUT "@_";
     print MY_LOG "@_";
   }

   LOGprint "my me ...
jason680 发表于 2011-09-06 17:43



    。。。。感谢!

但是我还有个问题,想不到好的办法:

因为我想把我在perl 里面执行system()的标准输出和标准错误输出都打印进入我的日志文件和终端,貌似不能两全。
我如果这样写: system("ls > $mylog 2>&1"),那终端就看不到错误输出(如果有的话);
我如果。。。。。

咦!有了,我可以试下在system里面使用tee,待我试试:)
作者: jason680    时间: 2011-09-08 11:10
。。。。感谢!

但是我还有个问题,想不到好的办法:

因为我想把我在perl 里面执行system( ...
brantc 发表于 2011-09-08 10:59


看来你就好好写你的shell script就好了.
(没看到你用到Perl的地方...)
作者: Perl_Er    时间: 2011-09-08 12:11
回复 13# brantc


    你可以先看一下书吗?
作者: brantc    时间: 2011-09-08 12:52
看来你就好好写你的shell script就好了.
(没看到你用到Perl的地方...)
jason680 发表于 2011-09-08 11:10



    您说得太对了。。。。
作者: brantc    时间: 2011-09-08 12:55
回复  brantc


    你可以先看一下书吗?
Perl_Er 发表于 2011-09-08 12:11



    o(╯□╰)o我在看书的。。。但是问题比较急,所以只好发帖借大家的智慧了,惭愧了。。。
作者: Perl_Er    时间: 2011-09-08 13:14
回复 14# jason680


    FAQs里面有你这个问题的答案
作者: brantc    时间: 2011-09-08 14:15
本帖最后由 brantc 于 2011-09-08 14:17 编辑
回复  jason680


    FAQs里面有你这个问题的答案
Perl_Er 发表于 2011-09-08 13:14



    perl faq5?。。。How do I print to more than one file at once?
作者: zzmmgjj    时间: 2011-09-08 18:47
1. if you are dealing with complicated log mechanism, check out
  1. Log::Perl4log
复制代码
2. To install your own perl installation and leave system perl along, check out perlbrew

3. system won't return the command output, use qx or `` instead, read the result from qx and `` and write to the file you want.
作者: 毛xx总理    时间: 2011-09-08 18:51
都去吃饭了吗?
作者: lxb456900    时间: 2011-10-07 18:33
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2