【发布时间】:2011-10-26 18:28:09
【问题描述】:
我正试图弄清楚我将要迭代的 CSV 中存在多少行,以便我可以监控进度。
从命令行,这给出了正确的值:
cat /path/to/CA_MA.csv | perl -p -i -e "s/^M/\n/g" | wc -l
但是,使用shell_exec(),我什么也得不到:
trim( shell_exec( "cat /path/to/CA_MA.csv | perl -p -i -e 's/^M/\n/g' | wc -l" ) )
我已经尝试过 STDOUT 和 STDERR (... 2>&1)。我已经从交互式控制台 (php -a) 的脚本中尝试了这个。
【问题讨论】:
-
也许我是愚蠢的建议但是......你不能使用 file_get_contents() 并计算新行吗?或者也许使用 file() 并计算返回数组的元素?
-
我几乎可以肯定您不需要处理
^M字符和wc -l < /path/to/CA_MA.csv只会回显行数。为什么您在 php shell_exec 中没有看到任何结果,这超出了我的经验。您是否尝试搜索 tag=php shell_exec?我几乎可以肯定我在这方面提到了另一个函数调用,即 shell_execv() 或类似的。祝你好运。 -
为什么不使用 pipeview (pv) 实用程序来监控进度?
-
@shellter 如果我不处理 ^M,我会在命令行上得到
wc -l结果为 1。还有其他外壳/系统功能,但我得到的结果都是一样的。 -
@AurelioDeRosa 老实说,我没有尝试过。行尾都是 fubar 所以我可能认为我需要做更多。我会尝试这种方法。谢谢。