我目前正在 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');
}
}
但是,命令列回傳 Gradle 命令構建正在啟動,但它不會創建檔案夾并生成 apk
當前檔案夾結構 /var/www/html 和里面的 html 是專案檔案夾和 Laravel 專案
注意:在我在 Laravel 函式中呼叫 Gradle build 命令之前,我曾經呼叫 python 檔案并且該 python 檔案正在呼叫 Gradle 命令,但我遇到了同樣的問題,未創建 apk,但是當我從 bash 命令運行相同的 python 檔案時作業正常
uj5u.com熱心網友回復:
有兩種方法可以實作這一點:
第一個是將您的命令包含到一個 .sh 檔案中,您應該使用以下命令使其可執行:
chmod x 檔案.sh
然后你應該使用 Symfony 行程從 laravel 呼叫該檔案,以便你可以獲取日志行程和錯誤的詳細資訊:
使用 Symfony\Component\Process\Process; 使用 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 的公共目錄中,因為那里的所有內容都應該是可編輯的。'=
我實際上建議第一個,因為您不需要將某些檔案夾的所有者更改為 www-data 以授予寫權限。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/382622.html
