账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    如何使用nodejs调用需要输入参数的bat文件并且跳过pause
    • ༺ۣۖꪑۣۖ༒ۣꫀۣۖ༻2019-08-14 00:00
    • 11
    150
    0

    例如我有一个这样的bat文件:

    set /p a=请输入a:
    pause
    set /p b=请输入b:
    echo %a%  %b%

    在nodejs里安装了第三方包execa。

    const execa = require('execa');
    const path = require('path');
    const fs = require('fs');
    
    const testPath = path.join(__dirname, './test');
    
    const subprocess = execa(path.join(testPath, "test.bat"), [], {
        cwd: testPath
    });
    
    subprocess.stdout.on('data', (data) => {
        console.log(`输出:${data}`)
        if (/a/ig.test(data)) {
            subprocess.stdin.write('1');
            //执行到这里就卡住了
            //subprocess.stdin.end()
        } else if ((/b/ig.test(data))) {
            console.log('image')
            subprocess.stdin.write('jpg');
            //subprocess.stdin.end()
        }
    });
    
    subprocess.stdout.on('end', (data) => {
        console.log(`end事件${data}`)
    });
    subprocess.stdout.on('close', (data) => {
        console.log(`close事件${data}`)
    });
    subprocess.stdout.on('error', (data) => {
        console.log(`error事件${data}`)
    });
    

    遇到pause就会停止,应该怎么做才可以跳过pause?
    感谢大神们。

    在群里的小伙伴帮助下找到解决办法了,根本不用触发方法,加一个换行就可以了,正确的方式:

    const execa = require('execa');
    const path = require('path');
    const fs = require('fs');
    
    const testPath = path.join(__dirname, './test');
    
    const subprocess = execa(path.join(testPath, "test.bat"), [], {
        cwd: testPath
    });
    
    subprocess.stdout.on('data', (data) => {
        console.log(`输出:${data}`)
        if (/a/ig.test(data)) {
            //在输出结束的时候加一个\n
            subprocess.stdin.write('1\n');
        } else if ((/b/ig.test(data))) {
            console.log('image')
            subprocess.stdin.write('jpg\n');
        }
    });
    
    subprocess.stdout.on('end', (data) => {
        console.log(`end事件${data}`)
    });
    subprocess.stdout.on('close', (data) => {
        console.log(`close事件${data}`)
    });
    subprocess.stdout.on('error', (data) => {
        console.log(`error事件${data}`)
    });
    

    碰到pause暂停的时候也一样,\n就可以了

    subprocess.stdin.write('\n');
    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 共 0 条
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部