新手问题 用 js 遍历数组,然后调用 python 脚本处理数组元素,但得到的结果却是乱序的

Mind · 2018年02月26日 · 最后由 Mind 回复于 2018年02月26日 · 1487 次阅读

1. 代码:

1.1 js 脚本

// call_py.js

// 制作数组
var s1="1 What makes Rails so great?"
var s2 = "2 do you love me still ?"
var s3 = "3 The Ruby on Rails Tutorial is designed to give you a thorough introduction to web application developmentntrepreneur."
var s4 = "4 of course i still love you . "
var list=[s1,s2,s3,s4]

// 子进程
var exec = require('child_process').exec;

//  遍历数组
let iterable = list

for(let value of iterable)
{
    exec('python py_test.py '+value+' ',function(error,stdout,stderr)
            {
                if(error){
                    console.log(stderr)
                }else{
                    console.log(stdout)
                }
            }

        )
}

1.2 python 脚本:

# py_test.py
import sys

script = sys.argv
print script

1.3 输出的结果:

['py_test.py', '1', 'What', 'makes', 'Rails', 'so', 'great?']

['py_test.py', '2', 'do', 'you', 'love', 'me', 'still', '?']

['py_test.py', '3', 'The', 'Ruby', 'on', 'Rails', 'Tutorial', 'is', 'designed', 'to', 'give', 'you', 'a', 'thorough', 'introduction', 'to', 'web', 'application', 'developmentntrepreneur.']

['py_test.py', '4', 'of', 'course', 'i', 'still', 'love', 'you', '.']

2.疑问:

2.1 问题一:

  • 为什么输出的结果不是按照数组的顺序来的,而是乱序的?
  • 怎样才能输出按照数组顺序的结果?

2.2 问题二:

  • 因为我在 js 脚本的第 18 行用的是'python py_test.py '+value+' ',所以我觉得应该是将value作为一个值传递给 python 脚本,但是实际输出结果却显示是拆分成了很多个词,然后变成了很多个值?

1.哪里乱序了?

2.改成'python py_test.py "'+value+'" '试试

1.问题二没有出现了,谢谢哈;

2 .嗯,是我表述的不清楚。

就是我将 py_test.py 脚本改成这样的话:

# py_test.py
import sys

script,value = sys.argv
print value

然后会按照 js 脚本中的变量 list 中元素的顺序输出:

1 What makes Rails so great?

2 do you love me still ?

3 The Ruby on Rails Tutorial is designed to give you a thorough introduction to web application developmentntrepreneur.

4 of course i still love you .

而不是随机的顺序。像这样:

1 What makes Rails so great?

3 The Ruby on Rails Tutorial is designed to give you a thorough introduction to web application developmentntrepreneur.

2 do you love me still ?

4 of course i still love you .

哦 因为 child_process 是异步调用的。所以输出的结果是随机的。

Mind 关闭了讨论。 05月25日 16:56
需要 登录 后方可回复, 如果你还没有账号请 注册新账号