使用 laravel 函数构建 gradle assemble apk
Build gradle assemble apk using laravel function
我目前正在 larval 函数中调用主 python 文件,在主 python 文件中我正在调用另外 2 个文件(PowerShell 和子 python 文件)问题是当 Laravel 函数被触发时它只调用主 python 文件,但是当我使用终端调用主 python 文件时,所有文件的执行如下:
Laravel 函数:
public function initialize(Request $request)
{
$store_name = $request->get('store_name', 1);
if (empty($store_name)) {
return 'Missing store name';
} else {
$processes = File::get("/root/flask/android_api/processes.txt");
File::put('/root/flask/android_api/url.txt', $store_name );
$process = new Process(['python3.6', '/root/flask/android_api/buildAPK.py']);
$process->run();
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
} else {
return 'Starting the processes to build';
}
}
}
在主 python 文件中我有:
try:
p = subprocess.Popen(["/usr/bin/pwsh",
"/root/flask/android_api/set_apk_builder.ps1", '-ExecutionPolicy',
'Unrestricted',
'./buildxml.ps1'],
stdout=sys.stdout)
p.communicate()
except:
file = open ("/root/flask/android_api/log.txt", "w")
file.write ("fail")
file.close()
import slack
// call(["python", "/root/flask/flask.py"])
os.system('python3.7 /root/flask/flask.py')
编辑:
现在我将构建更改为直接从 laravel 函数生成 apk
使用此命令:
public function initialize(Request $request)
{
$store_name = $request->get('store_name', 1);
if (empty($store_name)) {
return 'Missing store name';
} else {
return shell_exec('cd /var/www/html/androidProject && chmod +x gradlew && ./gradlew assembledemoDebug');
}
}
但是,命令行 returns Gradle 命令构建正在启动,但它不会创建文件夹并生成 apk
当前文件夹结构 /var/www/html 里面 html 是项目文件夹和 laravel 项目
注意:在 Laravel 函数中调用 Gradle 构建命令之前,我曾经调用 python 文件并且 python 文件正在调用 Gradle命令,但我有同样的问题,未创建 apk,但是当我 运行 来自 bash 命令的相同 python 文件时,它工作正常
您可以通过两种方式完成此操作:
首先是将您的命令包含到一个 .sh 文件中,您应该使用此命令使其可执行:
chmod +x file.sh
然后您应该使用 Symfony 进程从 laravel 调用该文件,以便您可以获得日志进程和错误的详细信息:
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
$process = new Process('sh /folder_name/file_name.sh');
$process->run();
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
echo $process->getOutput();
然后在该文件中包含您希望 运行 的所有命令。
其次你可以运行这些命令使用
$output = shell_exec('ls -lart');
then echo "<pre>$output</pre>";
您需要将所有可写文件移动到 Laravel 中的 public 目录,因为那是所有内容都应该可编辑的地方。'=
实际上我建议第一个,因为您不需要将某些文件夹的所有者更改为 www-data 来授予写入权限。
我目前正在 larval 函数中调用主 python 文件,在主 python 文件中我正在调用另外 2 个文件(PowerShell 和子 python 文件)问题是当 Laravel 函数被触发时它只调用主 python 文件,但是当我使用终端调用主 python 文件时,所有文件的执行如下:
Laravel 函数:
public function initialize(Request $request)
{
$store_name = $request->get('store_name', 1);
if (empty($store_name)) {
return 'Missing store name';
} else {
$processes = File::get("/root/flask/android_api/processes.txt");
File::put('/root/flask/android_api/url.txt', $store_name );
$process = new Process(['python3.6', '/root/flask/android_api/buildAPK.py']);
$process->run();
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
} else {
return 'Starting the processes to build';
}
}
}
在主 python 文件中我有:
try:
p = subprocess.Popen(["/usr/bin/pwsh",
"/root/flask/android_api/set_apk_builder.ps1", '-ExecutionPolicy',
'Unrestricted',
'./buildxml.ps1'],
stdout=sys.stdout)
p.communicate()
except:
file = open ("/root/flask/android_api/log.txt", "w")
file.write ("fail")
file.close()
import slack
// call(["python", "/root/flask/flask.py"])
os.system('python3.7 /root/flask/flask.py')
编辑:
现在我将构建更改为直接从 laravel 函数生成 apk 使用此命令:
public function initialize(Request $request)
{
$store_name = $request->get('store_name', 1);
if (empty($store_name)) {
return 'Missing store name';
} else {
return shell_exec('cd /var/www/html/androidProject && chmod +x gradlew && ./gradlew assembledemoDebug');
}
}
但是,命令行 returns Gradle 命令构建正在启动,但它不会创建文件夹并生成 apk
当前文件夹结构 /var/www/html 里面 html 是项目文件夹和 laravel 项目
注意:在 Laravel 函数中调用 Gradle 构建命令之前,我曾经调用 python 文件并且 python 文件正在调用 Gradle命令,但我有同样的问题,未创建 apk,但是当我 运行 来自 bash 命令的相同 python 文件时,它工作正常
您可以通过两种方式完成此操作:
首先是将您的命令包含到一个 .sh 文件中,您应该使用此命令使其可执行:
chmod +x file.sh
然后您应该使用 Symfony 进程从 laravel 调用该文件,以便您可以获得日志进程和错误的详细信息:
use Symfony\Component\Process\Process; use Symfony\Component\Process\Exception\ProcessFailedException;
$process = new Process('sh /folder_name/file_name.sh');
$process->run();
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
echo $process->getOutput();
然后在该文件中包含您希望 运行 的所有命令。
其次你可以运行这些命令使用
$output = shell_exec('ls -lart');
then echo "<pre>$output</pre>";
您需要将所有可写文件移动到 Laravel 中的 public 目录,因为那是所有内容都应该可编辑的地方。'=
实际上我建议第一个,因为您不需要将某些文件夹的所有者更改为 www-data 来授予写入权限。