doc、bat、cmd、Python调用nodejs并传参

这篇博客探讨了在doc、bat、Python和Node.js之间进行相互调用的方法,包括如何传参。作者强调了理解“重定向”、“标准输入”和“标准输出”的重要性,并提供了不同语言间调用的示例代码,如bat调用Python、Python调用Node.js等。文章还讨论了在参数数量较大时,如何通过文件传递数据以提高清晰度。

doc的好处多多哦 有时间可以学一下哦,毕竟也不多。

学了doc、nodejs、Python
现在需要在各个语言之间相互调用,排列组合一下一共有12种相互个组合。

doc文件会集成在文件bat,以下统称bat

bat调用Python
bat调用nodejs
bat调用Python(带参)
bat调用nodejs(带参)

python调用bat
python调用nodejs
python调用bat(带参)
python调用nodejs(带参)

nodejs调用bat
nodejs调用python
nodejs调用bat(带参)
nodejs调用python(带参)

首先我们来了解一下“重定向”、“标准输入”、“标准输出”

这里我就不展开说了,想了解的自行学习吧。
我说一下标准输入和输出就行了,因为这会涉及到传参。
在doc操作中,如果我们需要调用另外的bat文件,并希望往里面传递参数,我们可以在调用文件后用空格来添加多个参数。

call 01.bat 10 20 30
echo 运行结束
pause

这里是调用了当前目录的01.bat,并传递三个参数,10,20,30,这种传递参数的方式就叫标准传参,或者说接收cmd窗口传递的参数。

echo %1 %2 %3
pause

这是0.1bat启动是接收参数的方法。

为什么要先说这个? 因为doc贯穿了一会我们要聊到的各个语言间的调用和传参。

了解到了doc传递参数的语法我们就好办了,接下了我们就只需要找到每种语言在doc下调用和如何接收标准参数的api就可以了。

上边已经说了bat调用bat了,如果没有看懂的,还希望在仔细消化一下,因为它贯穿了各个语言脚本的调用和传参 这里补充一下,(如果传递的数据特别多怎么办?比如传递10万字?如果传递的数据比较多,我推荐先将其保存成文件,到另外的语言时再调用该文件,这样会比较清晰)。

好了,那我们下面就开始直接写代码了

1.bat调用python

python 01.py

python是全局变量,是python软件的绝对地址,这个在安装python时应该就设置好了的,后吗空格加要执行的python脚本。

2.bat调用nodejs

node 01.py

和调用python脚本一样,只是软件改了

3.bat调用python并传参

python 01.py argument01 argument04 argument03

前面保持不变,后面增加了3个参数
重点: 怎么接受参数?使用python的sys 包,

import sys
print(sys.argv[0])
a=int(sys.argv[1])
b=int(sys.argv[2])
print(a+b)
python a.py 10 20 30

a.py::打印结果
10 20 30::打印结果

这里要说的是标准传参会将行里的数据按空格划分成一个数组,数组的第一个[0]会是被调用的文件,数组的第二个开始往后才是我们传递的参数。(注意 nodejs的api数组和python的不一样)

4.bat调用nodejs并传参

node 01.py argument01 argument04 argument03

前面保持不变,后面增加了3个参数
重点: 怎么接受参数?使用nodejs的process 包,

var process=require("process")
process.argv.forEach((val, index) => {
    console.log(`${index}: ${val}`);
  });
node process接收cmd参数.js 10 20 30
::下边是打印的结果
0: C:\Program Files\nodejs\node.exe
1: F:\LCM\\process接收cmd参数.js
2: 10
3: 20
4: 30

这里要说的是标准传参会将行里的数据按空格划分成一个数组,数组的第一个[0]会是执行的软件路径,数组第二个是被执行脚本的路径,数组的第三个开始往后才是我们传递的参数。(注意 nodejs的api数组和python的不一样)
所以nodejs的是从[3]开始去传递的参数。

5.nodejs调用pytohn并传参,并接收python打印的数据

(这里偷一下小懒了,因为原理都是一样的,所以我就讲一个就行了,确实需要另外的可以给我留言或私信)

其实每一个脚本的调用都是开启一个子进程,类似于开启一个shell并将字符串传递进去执行,但是有的时候我们需要看到错误、bug、输出啊等等的一些反馈,所以官方就提供了这样的一个api供我们使用,每家的api相似但不相同。
(记得复习标准输入,标准输出哦)

const process=require("child_process");
let s=process.exec("python a.py "+"1 2",function(error, stdout, stderr,stdin) {
    console.log(error);
    console.log(stdout);
    console.log(stderr);
    console.log(stdin);
});

首先我们导入child_process,创建一个子进程,还记得我说了程序子进程相当于开了一个cmd来执行要求的字符串,所以我们这个子进程相当于在cmd里执行"python a.py "+“1 2”,到窗口就是:

python a.py 1 2

这时候我们是不是就在a.py调用sys接收两个参数就可以了

import sys
a=int(sys.argv[1])
b=int(sys.argv[2])
# c=int(sys.argv[3])
print(sys.argv[0])
print("nodejs")

我们看一下nodejs执行后的结果

null
a.py
nodejs

undefined

nodejs里面我们打印了4个参数,1:错误,2:标准输出,3:错误,4:标准输入

这里可能是参数设置出了些问题,但总归还是实现了,大家如果自行设置的时候,一定要好好看介绍文档,子进程的参数非常多。

好了,其他的语言相互调用其实也是这样的,我就不都说了。



加餐
process.exec里面可以选择一些参数以options的方式配置

var options={
 encoding: 'utf8',
 timeout: 0,
 maxBuffer: 200 * 1024,
 killSignal: 'SIGTERM',
 setsid: false,
 windowsHide:true
}
const process=require("child_process");
let s=process.exec("python a.py "+"1 2", options,function(error, stdout, stderr,stdin) {
    console.log(error);
    console.log(stdout);
    console.log(stderr);
    console.log(stdin);
});

至于每个参数具体的是控制什么的可以参考官网的介绍

cwd 子进程的当前工作目录。 默认值: null。
env  环境变量的键值对。 默认值: process.env。
encoding  默认值: 'utf8'。
shell  用于执行命令。 参见 shell 的要求和默认的 Windows shell。 默认值: Unix 上是 '/bin/sh',Windows 上是 process.env.ComSpec。
timeout  默认值: 0。
maxBuffer  stdout 或 stderr 上允许的最大数据量(以字节为单位)。 如果超过限制,则子进程会被终止,并且输出会被截断。 参见 maxBuffer 和 Unicode 的注意事项。 默认值: 1024 * 1024。
killSignal  |  默认值: 'SIGTERM'。
uid  设置进程的用户标识,参见 setuid(2)。
gid  设置进程的群组标识,参见 setgid(2)。
windowsHide  隐藏子进程的控制台窗口(在 Windows 系统上通常会创建)。 默认值: false。

以上只是个人的学习经验,敬请谅解和纠正

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圈点Studio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值