Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
432 views
in Technique[技术] by (71.8m points)

PHP exec output 被用省略号截断,无法获得完整的返回值?

获取git log的文件更改列表

执行命令

/usr/bin/git log --stat --pretty=format:%an*_*%cd*_*%H*_*%s

以下是输出

rrr*_*Wed Mar 29 15:03:44 2016 +0800*_*51c32954639dffbdba18050527ca56b0ec243453*_*bug#1395
 mine-web-manage/src/main/webapp/WEB-INF/views/organ/courseForm.jsp                                         |  6 +++++-
 mine-web-server/src/main/java/com/mine/web/server/controller/organ/RestPublicOrganTeacherController.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+), 1 deletion(-)

但是用php的exec执行时,返回值被切断了

php代码

$cmd = "/usr/bin/git log --stat --pretty=format:%an*_*%cd*_*%H*_*%s";
exec($cmd, $list, $return);
var_dump($list);

输出结果

  string(90) "rrr*_*Wed Mar 29 15:03:44 2016 +0800*_*51c32954639dffbdba18050527ca56b0ec243453*_*bug#1395"
  [18] =>
  string(60) " .../main/webapp/WEB-INF/views/organ/courseForm.jsp |  6 ++-"
  [19] =>
  string(79) " .../organ/RestPublicOrganTeacherController.java    | 53 ++++++++++++++++++++++"
  [20] =>
  string(49) " 2 files changed, 58 insertions(+), 1 deletion(-)"

还尝试以下几种方式,在命令后加上输出到文件等等,获取的结果都是被截断的,格式跟上面一样,无法获取到完整的文件路径

1, $cmd . " 2>&1"
2, $cmd . " > /tmp/cmd.txt"
3, passthru($cmd, $list, $return);

如果才能在exec中获取到完整的文件路径?

非常感谢您的帮助


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

改成:

$cmd = "/usr/bin/git log --stat-width=100 --stat-name-width=80 --pretty=format:%an*_*%cd*_*%H*_*%s";

这个长度设置在我这边是没问题的,不过还得看你那边完整路径名长度而定,stat-width表示正行长度,stat-name-width表示文件名长度,光调整文件名长度是不够的。

show full file path in git log


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...