我已经根据我在其他应用程序中遇到的问题编写了以下程序,在下面的程序中,我从nodejs调用python脚本以完成一些工作,python脚本返回一些结果,这些结果将在nodejs中进一步使用
nodeJS :
var pythonShell = require('python-shell');
for(let i=0;i<3;i++){
for(let j=0;j<3;j++){
if(i==j){
var options = {
mode: 'text',
scriptPath: 'python file path',
pythonPath: 'python.exe path',
env : process.env,
args: [i]
};
console.log("====calling Python script for ====",i," ",j);
pythonShell.run('check.py', options, function(err, results){
if(err){
console.log(err);
throw err;
}
else {
console.log("====Python result for ====",i," ",j);
console.log(results[0]);
}
});
}
}
}
check.py
import sys
k = sys.argv[1]
print(k)
limit=10000000
if(k==2):
limit=3
if(k==1):
limit=2
s=0
for i in range(limit):
for j in range(10):
s+=1
print(s," i = ",k)
Output of nodeJs script
====calling Python script for ==== 0 0
====calling Python script for ==== 1 1
====calling Python script for ==== 2 2
====Python result for ==== 2 2
100000000 i = 2
====Python result for ==== 0 0
100000000 i = 0
====Python result for ==== 1 1
100000000 i = 1
从上面的代码中,您可以看到,即使forloop
在i = 1和i = 2上运行的时间更少,我也得到相同的输出,不知道发生了什么。
提前致谢。
edit
:显示带有在python脚本中传递的参数的结果
====Python result for ==== 1 1
[ '1\r', '100000000 i = 1\r' ]
====Python result for ==== 0 0
[ '0\r', '100000000 i = 0\r' ]
====Python result for ==== 2 2
[ '2\r', '100000000 i = 2\r' ]
答案 0 :(得分:0)
这里的问题是python脚本获取的参数传递为string
。因此,python脚本中的条件始终变为false
。您可以将字符串转换为整数。
在您的python代码中尝试以下操作:
import sys
k = int(sys.argv[1])
limit=10000000
if(k==2):
limit=3
if(k==1):
limit=2
s=0
for i in range(limit):
for j in range(10):
s+=1
print(s," i = ",k)
您可以在这里
k = int(sys.argv[1])
-转换为整数
或
if(k=='2'):
limit=3
if(k=='1'):
limit=2