脚本调用其他语言( java、python、php 等)
预执行操作或后执行操作中的自定义脚本,可以直接调用以下语言编写的外部程序:
java (.jar)
python (.py)
php (.php)
js (.js)
BeanShell (.bsh)
go (.go)
shell (.sh)
ruby (.rb)
lua (.lua)
提示
仅版本号 >= 7.0.13 的 Apipost 客户端
版本支持脚本调用外部程序。Web
端不支持
使用方法
脚本中使用方法 apt.execute(fileName, args)
调用外部程序。
参数 ```fileName:String```,外部程序文件名绝对路径。
参数 ```args:Array<String>```,传给外部程序的运行参数,为字符串数组类型,可以传递多个参数。
Windows的路径地址格式:C:\\Users\\YourName\\Documents\\file.txt
macOS的路径地址格式: /User/YourName/Documents/file.txt
返回值:String
,命令行运行程序时,在控制台输出的字符串。
确保电脑已经安装相应程序运行需要的环境。
.jar程序:需要 安装 java 环境。
.py程序:需要安装 python 环境。
.js程序:需要安装 nodejs 环境。
其他语言程序:需要安装对应语言的环境。
调用原理
调用外部程序是以命令行的方式运行程序,返回值为程序在控制台输出的字符串。 系统会自动根据外部程序的后缀名,调用对应的命令行来运行外部程序。
.jar程序:通过java命令运行
如脚本 apt.execute('cn.example.Demo.jar', ['abc','bcd'])
实际执行命令为 java -jar cn.example.Demo.jar abc bcd
如需要调用jar中指定方法,执行:
apt.execute('cn.example.Demo.jar', ['abc','bcd'], {
className: 'com.example.Demo',
method: "sayHi"
}),
实际执行了 cn.example.Demo.jar文件com.example.Demo类sayHi方法,参数是['abc','bcd']
.py程序:通过python命令运行。
如脚本 apt.execute('md5-json.py', ['abc','bcd'])
实际执行命令为 python md5-json.py abc bcd
.js程序:通过node命令运行。
如脚本 apt.execute('xxx.js', ['abc','bcd'])
实际执行命令为 node xxx.js abc bcd
其他语言程序也是类似原理。
代码示例
后执行脚本:
try {
// php 示例,调用 demo.php
// 注意:json 格式数据作为参数时,需要使用 JSON.stringify 对参数进行序列化
// 实际命令行执行的命令为:php demo.php '{"a":1,"b":2}'
const phpResultString = await apt.execute("demo.php", [JSON.stringify({ a: 1, b: 2 })]);
// 注意:返回数据为 json 格式字符串时,可使用 JSON.parse 反序列化
const phpResult = JSON.parse(phpResultString);
console.log("php 运行结果", phpResult);
} catch (e) {
console.error(e.message);
}
test.php 代码:
<?php
$param = json_decode($argv[1]);
$result = [];
foreach($param as $key=>$value)
{
$result[$key] = $value * 2;
}
echo json_encode($result);
JavaScript .js
示例
信息
首先确保电脑中已安装 Node.js
环境,可前往官网下载安装 https://nodejs.org/zh-cn
普通使用
- 准备
.js
文件,示例如下:
console.log('你好 world')
- 添加自定义脚本(预执行或者后执行)输入脚本
const data = await apt.execute("外部脚本文件的绝对地址"); //将脚本的执行结果赋给一个常量 data
console.log(data)//打印data
- 点击发送接口,在控制台查看结果
高级用法—传递参数
- 准备
.js
文件,示例如下:
// 定义求和函数
function sum(...args) {
// 初始化总和为 0
let total = 0;
// 遍历所有传入的参数
for (let num of args) {
// 累加每个参数到总和中
total += num;
}
// 返回总和
return total;
}
// 从命令行参数获取输入,跳过前两个参数(node 命令路径和脚本文件路径)
const inputArgs = process.argv.slice(2).map(Number);
// 调用求和函数
const result = sum(...inputArgs);
// 打印结果
console.log(result);
- 添加自定义脚本(预执行或者后执行)输入脚本
const data = await apt.execute("外部脚本文件的绝对地址", ['12', '5.5', '-3', '7.2']); //将脚本的执行结果赋给一个常量 data
console.log(data)//打印data
- 点击发送接口,在控制台查看结果
Python .py
示例
信息
首先确保电脑中已安装 Python 环境,可前往官网下载安装 https://www.python.org/downloads/macos/
普通使用
- 准备
.py
文件,示例如下:
print("Hello World!!")
- 添加自定义脚本(预执行或者后执行)输入脚本
const data = await apt.execute("外部脚本文件的绝对地址"); //将脚本的执行结果赋给一个常量 data
console.log(data)//打印data
- 点击发送接口,在控制台查看结果
高级用法—传递参数
- 准备 .py文件,示例如下:
# your_script.py 内容
import sys
print("所有参数:", sys.argv) # 参数列表(包含脚本名)
print("脚本名称:", sys.argv[0]) # 第一个参数是脚本本身
print("第一个参数:", sys.argv[1]) # 用户传入的第一个参数
print("第二个参数:", sys.argv[2]) # 用户传入的第二个参数
# 参数数量检查
if len(sys.argv) < 3:
print("错误:需要至少2个参数")
sys.exit(1)
# 示例:计算参数总和
numbers = [float(arg) for arg in sys.argv[1:]]
print(f"参数总和: {sum(numbers)}")
- 添加自定义脚本(预执行或者后执行)输入脚本
const data = await apt.execute("外部脚本文件的绝对地址", ['5', '8.2', '13']); //将脚本的执行结果赋给一个常量 data
console.log(data)//打印data
- 点击发送接口,在控制台查看结果
Java .jar
信息
首先确保电脑中已安装Java环境,可前往官网下载安装 https://www.oracle.com/java/technologies/downloads/
普通使用
- 准备
.jar
文件,需要将创建的Java程序,将其打包成可执行的.jar文件。如果已经准备好可执行的.jar文件,可跳过打包过程,直接查看第五步。
// HelloWorld.java 示例代码如下:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("你好,我来自中国, World from JAR!");
System.out.println("This JAR file was created successfully.");
System.out.println("Current system time: " + new java.util.Date());
}
}
- 编译Java代码生成
.class
文件。 打开命令行终端,执行以下命令,将java文件生成一个 .class 文件:
javac HelloWorld.java
- 创建一个清单文件(Manifest),指定主类(Main-Class)。
创建
manifest.txt
文件,输入一下内容,注意冒号后有空格,并且要多个空行:
Main-Class: HelloWorld
- 将
.class文件
和清单文件
一起打包成JAR文件
。 将以上三个文件放到一个文件夹下,使用命令行定位到指定文件夹,并执行以下命令,即可打包成 .jar 文件
jar cvfm HelloWorld.jar manifest.txt HelloWorld.class
- 在接口中添加自定义脚本(预执行或者后执行)输入脚本
const data = await apt.execute("外部脚本文件的绝对地址"); //将脚本的执行结果赋给一个常量 data
console.log(data)//打印data
- 点击发送接口,在控制台查看结果
高级用法—传递参数
java
求和示例代码如下,同样需要将java
代码打包成可执行的.jar
文件,方法同上
public class SumCalculator {
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("错误:请通过命令行参数输入数字!");
System.out.println("示例:java SumCalculator 5 10.2 -3 7.5");
return;
}
double sum = 0;
System.out.println("输入参数:");
for (int i = 0; i < args.length; i++) {
try {
double num = Double.parseDouble(args[i]);
sum += num;
System.out.println("参数 " + (i+1) + ": " + args[i]);
} catch (NumberFormatException e) {
System.out.println("参数 " + (i+1) + ": '" + args[i] + "' <-- 无效数字将被忽略");
}
}
System.out.println("\n总和 = " + sum);
}
}
- 在接口中添加自定义脚本(预执行或者后执行)输入脚本,执行 .jar 文件
const data = await apt.execute("/Users/saron/Desktop/java/fuza/Sum.jar", ['12', '5.5', '-3', '7.2']); //将脚本的执行结果赋给一个常量 data
console.log(data)//打印data
- 点击发送接口,在控制台查看结果