xin/process

基于 symfony/process 实现的 Process App Work 处理器,可以让您的应用程序更便捷的集成第三方外部程序。

v1.0.0 2024-12-16 02:01 UTC

This package is auto-updated.

Last update: 2024-12-16 02:04:49 UTC


README

介绍

基于 symfony/process 实现的 Process App Work 处理器,可以让您的应用程序更便捷的集成第三方外部程序。

  • 集成Conda环境支持,可以更自由的切换不通Conda Env Python环境。

安装教程

composer require xin/process

使用说明

基本用法

<?php

use Symfony\Component\Process\Exception\ProcessFailedException;
use Xin\Process\Python\Python;

require_once './vendor/autoload.php';

$python = Python::fromShellCommandline('-i');
try {
    $python->mustRun();
} catch (ProcessFailedException $e) {
    var_dump($e->getMessage(), $e->getProcess()->getErrorOutput());
}

使用Conda切换环境

<?php

use Symfony\Component\Process\Exception\ProcessFailedException;
use Xin\Process\Python\Python;

require_once './vendor/autoload.php';

$python = Python::fromShellCommandline('-i');
try {
    $python->useCondaEnv('test')->setTty(true)->mustRun();
} catch (ProcessFailedException $e) {
    var_dump($e->getMessage(), $e->getProcess()->getErrorOutput());
}

Conda使用

<?php

use Symfony\Component\Process\Exception\ProcessFailedException;
use Xin\Process\Python\Conda;

require_once './vendor/autoload.php';
$conda = new Conda([]);

// 创建环境
var_dump($conda->create('test2'));

// 环境列表
var_dump($conda->envs());

// 移除环境
var_dump($conda->remove('test2'));

集成第三方外部程序使用

<?php

use Symfony\Component\Process\Exception\ProcessFailedException;
use Xin\Process\Python\Conda;

require_once './vendor/autoload.php';

class DemoAppWork extends PythonAppWork
{

    // 获取第三方应用程序的工作目录
	protected function getWorkDirectory(bool $valid = false)
	{
		return __DIR__;
	}

    // 定义第三方应用的能力
	public function ls($fail = false)
	{
		return $fail ? $this->processRunOrFail('ls')->getOutput() : $this->processRun('ls')->getOutput();
	}

    // 返回第三方应用使用的Conda环境
	protected function getDefaultCondaEnv()
	{
		return "demo";
	}
}

try {
	$app = new DefaultAppWork([]);
	var_dump($app->ls(true));
} catch (ProcessFailedException $e) {
	var_dump($e->getProcess()->getErrorOutput());
}