PHP exec不返回外部程序的输出

时间:2017-11-12 19:47:52

标签: php windows exec

我有以下计划:

function execute_query($ip, $username, $password, $query){
    $runCMD ="python run_query.py " . escapeshellarg($ip). " ". escapeshellarg($username) . " " . escapeshellarg($password)
        .  ' ' . escapeshellarg($query);
    $output = [];
    exec ($runCMD, $output);
    print_r ($output);
    //return (implode("\n", $output));
}

但是,数组$输出始终为空,程序正在从CMD手动执行时正确返回结果。我不知道该怎么做。我尝试了很多东西,我甚至不记得所有这些。以下是一些:

1.I disable UAC
2.I tried using shell_exec
3.I tried appending powershell in front of the command 'powershell' . $runCmd
4.I tried appending '2>&1' at the end of the command
5.I tried using proc_open, to manually open cmd.exe and execute the command

我可以做的任何其他想法,或者至少如何继续进行故障排除。使用Linux不是一种选择 好像stderr正在工作。此外,我尝试从python脚本打印'asd',它正在工作。 python脚本的输出是WMI查询,它可能包含\ n,\ r和\ t

这是python脚本:

from subprocess import check_output
import sys

def run_query(ip, username, password, query):
    runCMD = "query.exe " + username + " " + password + ' "' + query + '" ' + ip + ''
    results = check_output(runCMD).decode("utf-8")
    results = results.split("\n")
    for result in results:  
        if not result.startswith("__"):
            print(result)
if __name__ == "__main__":
    run_query(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])

更新1
query.exe是一个程序,它从WMI查询返回过滤结果,作为参数传递。不知道里面是什么,但它按预期工作。我也尝试从php脚本运行query.exe,同样的事情没有输出。
更新2
我使用的是PHP 7.1,尝试了PHP 5.6没有运气。
更新3
当我尝试在python中将字符串更改为字节数组时,我在手动运行脚本时得到此输出:

bytearray(b'The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)\r')
bytearray(b'')

,但php脚本会返回:

Array
(
    [0] => bytearray(b'')
)


更新4
f ***我正在将整个项目切换到python

0 个答案:

没有答案