我无法识别公共目录c:\ TEMP \ todos \ .meteor \ local \ build \ programs \ server \ public \ main.py中文件的路径。 Meteor抱怨文件或目录不存在。已经搜索过有关类似问题的其他帖子(例如Reading files from a directory inside a meteor app),但没有帮助。
以下是错误消息。
=> Your application has errors. Waiting for file change.
=> Modified -- restarting.
=> Meteor server restarted
W20151206-04:05:57.893(-5)? (STDERR) Error inside the Async.runSync: ENOENT, no such file or directory 'c:\TEMP\todos\.meteor\local\build\programs\server\public'
客户端代码
Meteor.call('runPython', function(err, response) {
if(err){
} else {
console.log(response);
}
})
服务器代码
Meteor.startup( function (){
Meteor.methods({
runPython: function (){
var PythonShell = Meteor.npmRequire('python-shell');
var fs = Meteor.npmRequire('fs');
var runPython = Async.runSync(function (done){
var files = fs.readdirSync('./public/');
// PythonShell.run('main.py', function ... was tried first but Meteor complained that "main.py doesn't exist". So below is a different attempt.
var py = _(files).reject(function(fileName){
return fileName.indexOf('.py') <0;
})
PythonShell.run(py, function (err) {
// PythonShell.run(path.join(py,"main.py") ... was also tried but resulted in the same error
if (err) throw err;
console.log('script running failed');
});
})
return "Success";
}
})
})
答案 0 :(得分:0)
public
文件夹中的所有文件都应使用'/'
:
var files = fs.readdirSync('/');
更多信息:http://docs.meteor.com/#/full/structuringyourapp
仅限服务器端(可能是您的情况,可能是更好的解决方案),您可以将所有内容放在private/
文件夹下,然后使用资产API 访问它们:{{3 }}
答案 1 :(得分:0)
显然我是在思考它。我需要做的就是指定文件的完整路径。
PythonShell.run('c:\\project\\public\\main.py', function ...
答案 2 :(得分:0)
如果您的应用程序允许将Python脚本移至/private
而不是/public
,则可以利用Meteor的Assets:
Assets
允许Meteor应用程序中的服务器代码访问静态服务器资产,这些资产位于应用程序树的私有子目录中。资产不会作为源文件处理,而是直接复制到应用程序包中。
e.g。如果您将脚本移至/private/scripts/script.py
,则可以通过Assets.absoluteFilePath('scripts/script.py')
生成Meteor way的绝对路径。