我可以将Javascript中的变量传递给child_process.exec命令吗?

时间:2016-05-19 18:51:34

标签: javascript node.js child-process

我对Node比较新,并且已经放在一个项目中,用户将在表单中输入他们的名字和姓氏,然后服务器将输出一个文件,其中包含他们的第一个名字和他们的姓氏作为文件名(所以约翰史密斯将成为JSmith)。

我正在尝试接受用户输入并将其放在我的child_process.exec命令中,但它无法识别变量,所以我得到一个没有名字的文件。因此,我只是JSmith.txt

而不是.txt
var name = fields['name']
var nameArray = name.split(' ')
var fileName = nameArray[0].charAt(0) + nameArray[1]

process.exec("Start of my command here"+fileName+ ".txt", function(error, stdout, stderr){
    console.log('done')
    console.log('stdout:', stdout);
    console.log('stderr:', stderr);
})

这是正确使用的功能还是我应该使用其他功能?我觉得问题在于变量没有被错误地读取,但我不知道如何传递它。

1 个答案:

答案 0 :(得分:1)

我遇到了你的问题,我的解决方法包括提前连接字符串。

var name = fields['name']
var nameArray = name.split(' ')
var fileName = nameArray[0].charAt(0) + nameArray[1]
var command = yourCommand + filename + ".txt" #replace yourCommand here


process.exec(command, function(error, stdout, stderr){
    console.log('done')
    console.log('stdout:', stdout);
    console.log('stderr:', stderr);
})

如果你想通过exec将一个对象(例如数组)传递给另一个文件,你只需要首先对其进行字符串化。

var myArray = ['beans', 'toast']
var stringifiedArray = JSON.stringify(myArray)
var command = 'python myModel.py ' + stringifiedArray


process.exec(command, function(error, stdout, stderr){
    console.log('done')
    console.log('stdout:', stdout);
    console.log('stderr:', stderr);
})

在另一个文件中(在本例中是一个名为myModel.py的python文件),然后你可以再次解析输入。

input = sys.argv[1]   #reading the (first) argument from the shell
data = json.loads(input)