如何将变量从 Laravel 控制器发送到 Python 脚本?

问题描述 投票:0回答:3
$client = new Client();
$a = 'https://scholar.google.com/citations?user=';
$gscID = 'EnegzCwAAAAJ';//for eg
$b = '&hl=en&oi=ao';
$url = $a . $gscID . $b;

$crawler = $client->request('GET', $url);

//python script
$process = new Process(['python', public_path() . '\ext.py'], null, ['SYSTEMROOT' => getenv('SYSTEMROOT'), 'PATH' => getenv("PATH")]);
$process->run();

// executes after the command finishes
if (!$process->isSuccessful()) {
    throw new ProcessFailedException($process);
}
$out[] = $process->getOutput();
dd($out);

从给定的 url 网页中提取表格

现在我想将

$url
变量传递给存储在我的公共文件夹中的 python 脚本,因为每次我的 url 都会随着不同人的 ID 而变化。

任何帮助将非常感激

python laravel web-scraping goutte
3个回答
2
投票

找到了一个简单的解决方案

$output = shell_exec("python ext.py $url");
//ext.py 是我的脚本的名称,
$url
是我想要传递的变量

然后在python脚本中写入

import sys
url = sys.argv[1]

0
投票

您可以在传递给 Process 的数组中添加脚本参数。 这是文档。https://symfony.com/doc/current/components/process.html#using-features-from-the-os-shell


0
投票

Laravel 的文档建议使用

env
提到的这里方法。我必须首先使用 bash 脚本激活 python 环境(第二步)

  1. 首先使用
    env
    方法调用作业控制器中的进程,您可以在其中将所有变量作为数组传递。
$scriptPath = base_path('python/run.sh');

$process = Process::env([
  'APP_URL' => config('app.url'),
  'OUTPUT_FILE' => $outputFile,
])->run('sh ' . $scriptPath);
  1. python/run.sh
    文件中 I
#!/bin/bash

# Navigate to the script's directory
cd "${0%/*}"

# Activate the virtual environment
source venv/bin/activate

# Run the Python script with the output file argument
python export.py --output_file "$OUTPUT_FILE" --app_url "$APP_URL"

# Deactivate the virtual environment
deactivate

  1. export.py 在
    argparse
  2. 的帮助下解析参数
import argparse

if __name__ == "__main__":
    # Save the file to the path provided as an argument

    parser = argparse.ArgumentParser(description='Export products to Excel.')
    parser.add_argument('--output_file', type=str, required=True, help='The output file path')
    parser.add_argument('--app_url', type=str, required=True, help='The application URL')

    args = parser.parse_args()

    export_products_to_excel(output_file=args.output_file,app_url=args.app_url)

© www.soinside.com 2019 - 2024. All rights reserved.