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

Can I pass a variable in Javascript to a child_process.exec command?

我对 Node 比较陌生,参与过一个项目,用户将在表单中输入他们的名字和姓氏,然后服务器将输出一个文件,其中包含他们的名字首字母和姓氏作为文件名(这样 John Smith 就会变成 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);
})

这是正确的功能还是我应该使用其他功能?感觉是变量没有读错,不知道怎么传进去

我 运行 正是你的问题,我的解决方法包括提前连接字符串。

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)