当前位置: 首页 > 知识库问答 >
问题:

在节点JS中运行命令行管理命令

漆雕成弘
2023-03-14

我无法在NodeJS应用程序中使用< code>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: /用户/用户名/桌面/存储库/项目/XYZ: 是一个目录

命令未发现错误:您的 shell 未正确配置为使用“conda 激活”。要初始化您的 shell,请运行

$ conda init <SHELL_NAME>

目前支持的shell有:-bash-fish-tcsh-xonsh-zsh-powershell

请参阅“conda init --帮助”以获取更多信息和选项。

重要说明:您可能需要在运行“conda init”后关闭并重新启动 shell。

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

我怎样才能做到这一点?

共有2个答案

任云瀚
2023-03-14

使用< code >似乎可以工作

我还需要指定conda.sh的路径,它位于/user/username/minicon da?? /etc/profile.d/中。

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

以下是工作代码:

视窗 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)
    }
);

系统

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',
        '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)
    }
);

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

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>',
    ]

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
});
宋耀
2023-03-14

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 运行当前直到最后才返回 I/O 结果。这意味着您将无法测量执行命令的进度,并且如果您期望获得大量回报(即,不适合内存),则不应使用它。

建议:考虑命名envXYZ_env甚至包括版本控制(例如,XYZ_v0_1_env),这样您就可以区分envXYZ和程序XYZ

 类似资料:
  • 常用的命令行参数: --testnet: connect to MOAC testnet (networkid = 101); --rpc: initiate RPC service of HTTP, so as to nonlocally access the specific MOAC node service; --rpcaddr value: default as "localhost

  • 问题内容: 有没有办法在Java应用程序中运行此命令行? 我可以用命令运行它,但是我不能在Java中运行它。 问题答案:

  • 我的package.json看起来像: 我想运行的js脚本app.js.我不能直接使用节点app.js运行它,因为app.js包含新的语言语法。 因此,我必须按照上面定义的启动脚本,使用NPMStart通过babel运行它。这里没有问题。 我的问题是如何在命令行中直接运行cmd,可以吗?类似的东西: npm运行babel节点——预设环境应用程序。js

  • 问题内容: 在groovy脚本中(用于jenkins管道):如何运行命令而不是命令? 我尝试了以下方法: 在通话中致电“ ” : 将呼叫替换为呼叫: 附加信息: 我的命令比命令更复杂。 问题答案: 您提供的Groovy脚本正在将结果脚本中的第一行格式化为空白行。shebang告诉脚本使用/ bin / bash而不是/ bin / sh运行,它需要位于文件的第一行,否则它将被忽略。 因此,您应该这

  • 在一个节点中。js,我想找到一种获取Unix终端命令输出的方法。有没有办法做到这一点?

  • 问题内容: 我在Node中编写一个Web应用程序。如果我有一些带有函数的JS文件,如何从命令行调用该函数? 问题答案: 对于您为什么要这样做,或者什么是更标准的做法,没有任何评论:这是您问题的解决方案…。请记住,命令行所需的引号类型可能会有所不同。 在您中,导出功能。有很多方法,但是例如: 然后假设您与命令提示符在同一目录中,然后这样调用它: 对于其他读者来说,OP的 功能可以被称为任何东西,这并