在NodeJS中运行Conda命令

我无法在NodeJS应用中使用exec运行Conda命令。

var conda_path = '~/miniconda3/bin/conda'

var cmd = conda_path + ' init bash & ' + conda_path + ' activate XYZ'
exec(command,function(error,stdout,stderr){

    }
);

我收到以下错误:

  

/ bin / sh:/ Users / username / Desktop / repos / project / XYZ:是目录

     

CommandNotFoundError:您的外壳尚未正确配置为   使用“ conda激活”。要初始化外壳,请运行

$ conda init <SHELL_NAME>
     

当前支持的shell是:     -重击     -鱼     -tcsh     -xonsh     -zsh     -Powershell

     

有关更多信息和选项,请参见“ conda init --help”。

     

重要提示:您可能需要在运行后关闭并重新启动Shell   'conda init'。

我在网上找不到有关从NodeJS应用程序运行conda命令的相关信息。

我该如何做?

owen7758 回答:在NodeJS中运行Conda命令

t似乎可以使用&字符来运行多个命令。

我还需要指定位于conda.sh内部的/users/username/miniconda??/etc/profile.d/的路径。

此文件可以复制到任何位置,例如NodeJS应用程序的根文件夹。

这是工作代码:

Windows 10

var commands = [
        'C:\\anaconda\\Scripts\\activate.bat C:\\anaconda','conda activate XYZ_v0_1_env','XYZ arg1  <some_file_input> arg2 arg3 arg4 <some_file_output>',]

exec(commands.join(' & '),function(error,stdout,stderr){
        console.log(error)
        console.log(stdout)
        console.log(stderr)
    }
);

OSX

const exec = require('child_process').exec;

var conda_path = __dirname + '/conda.sh'

var commands = [
        conda_path,conda_path + ' init',conda_path + ' activate XYZ_v0_1_env',stderr){
        console.log(error)
        console.log(stdout)
        console.log(stderr)
    }
);

编辑:使用spawn而非exec来读取流程的实时输出,即生成实时进度:

var commands = [
        'C:\\anaconda\\Scripts\\activate.bat C:\\anaconda',]

var spawn_ = spawn(commands.join('&'),{ shell: true });

spawn_.stdout.on('data',function (data) {
    //do something
});

spawn_.stderr.on('data',function (data) {
    //do something
});

spawn_.on('exit',function (code) {
    //do something
});
,

conda run

Conda提供了conda run命令,用于在环境中执行程序或运行脚本,而无需手动激活它。在您的情况下,您只需要一个命令即可,例如

var conda_exec = "C:\\anaconda\\Scripts\\conda.exe"
var env_name = "XYZ"
var sub_cmd = "XYZ arg1 <some_file_input> arg2 arg3 arg4 <some_file_output>"

var command = [conda_exec,'run','-n',env_name,sub_cmd].join(" ")

...

请注意,conda run当前直到最后才返回I / O结果。这意味着您将无法测量正在执行的命令的进度,并且如果期望获得较大的回报(即内存不足),则不应使用此命令。


建议:考虑命名环境XYZ_env或什至包括版本控制(例如XYZ_v0_1_env),以便区分环境XYZ和{{1 }}程序。

本文链接:https://www.f2er.com/3132404.html

大家都在问