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。
以上只是个人的学习经验,敬请谅解和纠正

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

被折叠的 条评论
为什么被折叠?



