gpt4 book ai didi

php 使用 system()/shell_exec()/exec() 运行终端应用程序,但只显示一半的输出

转载 作者:行者123 更新时间:2023-11-28 05:14:14 24 4
gpt4 key购买 nike

所以我有一个 php 脚本:

<?php
error_reporting(E_ALL);
//print_r($_GET);
$command = '../../build/program_name ' . $_GET['arg_id'];
$command .= ' -test '.$_GET['arg1'].' '.$_GET['arg2'];


//echo $command . "\n";
//system('pwd');
//system('ls -la ../../build');

//system('../../build/program_name 17 -test 125 1500 2>&1');
//passthru('../../build/program_name 17 -test 125 1500');
system('../../build/program_name 17 -test 125 1500');
//system($command);
//$data = exec($command);
//var_dump($data);

//echo $data;
//echo "\n";
?>

简单版:

<?php
error_reporting(E_ALL);

system('../../build/program_name 17 -test 125 1500');
?>

输出结果为:

argv[0] = ../../build/program_name
argv[1] = 17
argv[2] = -test
argv[3] = 125
argv[4] = 1500
argc = 5 so appears to be test request.
TEST(125, 1500) test requested.

如果我在终端中运行命令,但是输出是:

argv[0] = ../../build/program_name
argv[1] = 17
argv[2] = -test
argv[3] = 125
argv[4] = 1500
argc = 5 so appears to be test request.
TEST(125, 1500) test requested.
{ "function": "test" , "inputs": [125.000000, 1500.000000], "output": 999.000000}

当 php 运行完全相同的命令时,输出的最后一位(重要部分)没有显示...我已经打印了工作目录和命令只是为了验证我实际上正在运行命令正确地,结果在 exec、shell_exec 和系统中始终是相同的……我只是对这里发生的事情一头雾水……

编辑:关于“program_name”的附加信息这是一个极其简化的版本。它的 C++:

    float arg1;
float arg2;
if(argc == 5){
arg1 = atof(argv[3]);
arg2 = atof(argv[4]);
} else {
cout << "please supply appropriate args" << endl;
return -1;
}
#ifdef DEBUG
cout << "TEST(" << arg1 << ", " << arg2 << ") test requested." << endl;
#endif

float output = test(arg1, arg2);

string jsonOut = "{ ";
jsonOut.append(
"\"function\": \"test\" , ").append(
"\"inputs\": [").append(to_string(arg1)).append(", ").append(to_string(arg2)).append("], ").append(
"\"output\": ").append(to_string(output)).append("}");
cout << jsonOut << endl;
return 0;

最佳答案

使用passthru()而不是 system()。区别在于 passthru() 将命令的输出传递给 PHP 的输出,而 system() 捕获输出并返回最后一行。

您看到的其他输出可能已写入 stderr,而 system() 未捕获。

关于php 使用 system()/shell_exec()/exec() 运行终端应用程序,但只显示一半的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42983267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com