$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 而变化。
任何帮助将非常感激
找到了一个简单的解决方案
$output = shell_exec("python ext.py $url");
//ext.py 是我的脚本的名称,$url
是我想要传递的变量
然后在python脚本中写入
import sys
url = sys.argv[1]
您可以在传递给 Process 的数组中添加脚本参数。 这是文档。https://symfony.com/doc/current/components/process.html#using-features-from-the-os-shell
Laravel 的文档建议使用
env
提到的这里方法。我必须首先使用 bash 脚本激活 python 环境(第二步)
env
方法调用作业控制器中的进程,您可以在其中将所有变量作为数组传递。$scriptPath = base_path('python/run.sh');
$process = Process::env([
'APP_URL' => config('app.url'),
'OUTPUT_FILE' => $outputFile,
])->run('sh ' . $scriptPath);
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
argparse
库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)