Articles of raspbian

在这种情况下recursion是否好? (JavaScript的/的node.js)

我正尝试用树莓派制作一个电视,用javascript,一次又一次播放相同的播放列表。 播放文件不是问题,但我坚持在javascript的asynchronous部分这里的代码极其困扰我: function play (file) { exec('home/pi/play.sh', [file], function (error, stdout, stderr){ if (PIndice != Playlist.length-1){ PIndice=PIndice+1; }else{ PIndice=0; } play(Playlist[PIndice]); }); 当我确定其中有一个path名时,另一个函数用播放列表[0]调用它。 我的问题是:安全吗? 不会recursion最终会杀死CPU? 我虽然关于使用setTimeOut,但我没有find任何方式来获得video的持续时间。 我已经尝试过在循环中调用播放,但是我只是在同一时间播放整个播放列表。 我不要求一个全function的解决scheme,只是暗示我在哪里可以find一个方法来做到这一点是否有一种方法等待播放结束再次调用之前,即使JavaScript是asynchronous? 编辑:所有的文件在MPEG4,播放列表只是一个string数组,至less包含播放video文件的path名。 它应该没有互联网播放,所以没有浏览器,我不能使用HTML请求,让video的元数据得到它的持续时间。 编辑2:我忘记告诉play.sh只是启动播放器,如果没有其他实例,它只是一个以前的版本,我不知道execFile的callback

节点应用程序获取“错误:EACCES:权限被拒绝,mkdir'.tmp'

我在我的覆盆子pi上运行node-red,并试图find一个我自己编写的节点。 该节点在我的Windows PC上工作正常,但我还没有能够得到它在我的pi工作。 我的节点使用mailin来设置SMTP服务器,但我不认为这是该包的问题。 邮件试图创build一个临时文件夹,但它显然没有权限。 我如何给节点的权限,它需要能够创build此文件夹? 完整的错误: 5 Apr 20:06:22 – [info] Starting flows shell.js: internal error Error: EACCES: permission denied, mkdir '.tmp' at Error (native) at Object.fs.mkdirSync (fs.js:794:18) at mkdirSyncRecursive (/home/pi/.node-red/node_modules/node-red-contrib-mailin-smtp/node_modules/mailin/node_modules/shelljs/src/mkdir.js:11:8) at /home/pi/.node-red/node_modules/node-red-contrib-mailin-smtp/node_modules/mailin/node_modules/shelljs/src/mkdir.js:63:7 at Array.forEach (native) at Object._mkdir (/home/pi/.node-red/node_modules/node-red-contrib-mailin-smtp/node_modules/mailin/node_modules/shelljs/src/mkdir.js:48:8) at Object.mkdir (/home/pi/.node-red/node_modules/node-red-contrib-mailin-smtp/node_modules/mailin/node_modules/shelljs/src/common.js:186:23) at Mailin.start (/home/pi/.node-red/node_modules/node-red-contrib-mailin-smtp/node_modules/mailin/lib/mailin.js:73:15) at new MailinSMTP (/home/pi/.node-red/node_modules/node-red-contrib-mailin-smtp/mailinSMTP.js:15:10) at createNode (/usr/lib/node_modules/node-red/red/runtime/nodes/flows/Flow.js:276:18) at Flow.start […]

没有findnpm和节点命令

我正在尝试安装Node.js 本来我试图用apt-get install …来安装它。 不过,我后来意识到,这些已经过时,并使用下面的方式卸载它们: $ sudo apt-get –purge remove node $ sudo apt-get –purge remove nodejs 然后我按照这里的指示: https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions 基本上说要做到以下几点: curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash – sudo apt-get install -y nodejs 我这样做,它似乎安装好! 然而,我有的问题是命令npm和node无法识别! 然而,命令nodejs被识别。 我检查了目录/usr/local/bin和/usr/bin ,但找不到node或npm 。 我确实find了nodejs 。 我该如何解决这个问题? 以下内容: dpkg-query -s nodejs 输出这个: Package: nodejs Status: install ok installed Priority: extra […]

在javascript中从promt.get中修剪换行符

所以我在一个控制台(raspbian lite是确切的,但我认为这应该不重要)。 我要求我的js程序的用户提供一些数据(姓名,出生date等)。 这些数据被传送到一个python程序。 问题:一旦在Python中,我的variables的值的末尾粘贴换行符。 我可以修剪它在python中,但我更喜欢在JavaScript的早期做。 这是我的代码:正如你可以看到我已经尝试更换换行符,这是行不通的。 prompt.get(['name', 'date_start', 'date_end'], function (err, result) { if (err) { return onErr(err); }; console.log('Command-line input received:'); console.log(' Name ' + result.name); console.log(' Start date: ' + result.date_start); console.log(' End date: ' + result.date_end); var PythonShell = require('python-shell'); var pyshell = new PythonShell('new_try_crypto.py'); pyshell.send(result.name.replace('\n', '')); pyshell.send(result.date_start.replace('\n', '')) pyshell.send(result.date_end.replace('\n', ''))

bash和javascript之间的消息通过命名pipe道

我有一个JavaScript应用程序需要启动一个Linux应用程序。 由于我没有find任何方式来启动应用程序,当它结束时,我做了一个bash脚本启动应用程序,并在应用程序closures时通过命名pipe道发送消息。 直到这里,一切都很好,但是我找不到在javascript中捕获这个消息的方法。 有人知道如何获得在JavaScript的消息? 我search了,但我只发现如何在C#和C ++中做到这一点。 来自javascript的示例: var test = spawn('sh', ['home/pi/play.sh', data.video_id]); 只是产生一个bash命令,以video的名称启动脚本 来自bash的示例: mkfifo btjpipe if pgrep omxplayer then echo "AR">btjpipe else clear omxplayer $1 > dev/null echo "VE">btjpipe 创buildpipe道,寻找玩家是否已经在运行,然后发送AR(“已经运行”)或启动播放器并发送VE(“Video End”)。

Linux杀掉我的进程内存不足,怎么看我用了多less?

继我以前的问题( 防止我的node.js应用程序被操作系统杀死 ),我已经重写了我如何下载文件的gestion。 为了使它简短,我需要下载一些video文件(testing文件是3video,MP4,〜3分钟),我一次全部下载,过程中被杀死,dmesg说(2下载完成后): Out of memory: kill process (node) score 824 or sacrifice child Killed process (node)… 所以我通过下载video一个又一个地重试,但在第二次下载,我得到完全相同的消息,我的程序被杀害。 有什么方法可以看到我的代码的哪一部分出错了,或防止Linux杀死我的进程? 顺便说一句,不是三个同时下载比一个吃了更多的内存? 那么,为什么我会一个接一个地杀人呢? 该应用程序运行在树莓派,没有GUI,raspbian,我相信是唯一的应用程序正在运行(除了系统进程) 编辑:关于function的一些细节,以及我认为现在如何工作:应用程序是在节点启动,而不是在任何浏览器。 由于一个接一个下载video,我以为会less吃点内存,但是因为我一下子下载了更多的数据,似乎是错误的,原因是停止似乎是一样的。 这里的下载function,以防万一它可以帮助: file_url的types是http://adress.com/rpi/test.mp4 function download (file_url, callback){ var option={host:url.parse(file_url).host, port:80, path:url.parse(file_url).pathname}; var file_name=url.parse(file_url).pathname.split('/').pop(); var file=fs.createWriteStream(DOWNLOAD_DIR+file_name); //Seems to crash while here: http.get(options, function(res){ res.on('data', function(data){ file.write(data); }).on('end'), function(){ file.end(); callback(DOWNLOAD_DIR+file_name); }); }); […]

进程节点不断增长,直到吃完所有内存

这个问题和我以前的问题是一样的,但是由于反复编辑变得太大了,我更喜欢再问一遍。 我正在研究覆盆子pi(raspbian,512M RAM),并在node.js(v0.10.2)中做一个JavaScript应用程序。 在这里,我需要下载一些video,至于我这样做的块: function download (file_url, callback){ var option={host:url.parse(file_url).host, port:80,path:url.parse(file_url).pathname}; var file_name=url.parse(file_url).pathname.split('/').pop(); var file=fs.createWriteStream(DOWNLOAD_DIR+file_name); http.get(options, function(res){ res.on('data', function(data){ file.write(data); }).on('end'), function(){ file.end(); callback(DOWNLOAD_DIR+file_name); }); }); }; 我相信与使用node.js下载大文件类似, 避免了高内存消耗 问题在于,节点进程的rss不停止增加,大约从100M开始,在400M左右(最大内存)时被os所杀死。 由于我新内存泄漏跟踪和运行应用程序以外的任何浏览器,我要么不能使用或不能理解如何使用内存工具,我已经从util库中获取rss。 我的问题是:为什么rss不断增加,甚至当我在飞行中写入大量数据,和/或在哪里寻找解决scheme? 编辑:第二次看看上面的链接,我注意到使用createWriteStream上的标志,但无法find它们的列表或效果,是否有任何人在这里谁知道任何方式来访问这样的文档,它可能是相关的 编辑2:我现在一味地遵循Corlosdp的代码,添加标志(附加?)使rss以随机间隔下降2M,并使我的应用程序持续更长时间,但它仍然最终死亡 编辑3:我发现了一些有趣的东西 我编辑了下载function,看看我在文件中的位置: function download (file_url, callback){ var i=0; var option={host:url.parse(file_url).host, port:80,path:url.parse(file_url).pathname}; var file_name=url.parse(file_url).pathname.split('/').pop(); var file=fs.createWriteStream(DOWNLOAD_DIR+file_name, {flags:'a', encoding:'binary'); setInterval(function(){ console.log(i+"o downloaded"); console.log(util.inspect(process.memoryUsage())); […]

Node.JS onoff没有正确拾取GPIO

我build立一个简单的红外breakbeam电路插入我的RPi 2.我有一些工作代码在python成功地拿起,当我的红外光束坏了,但我想用node.js而不是python。 这是我的Python代码,很好,很简单: import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.IN) try: while True: print(GPIO.input(7)) time.sleep(0.01) except KeyboardInterrupt: GPIO.cleanup() 现在我做了一些关于node.js的不同软件包的阅读,这些软件包允许我在Pi上使用GPIO,并决定onoff看起来像最好的一个,因为它与我想要使用的callbackasynchronous工作。 这是我正在尝试用于节点的代码: var Gpio = require('onoff').Gpio, infrared = new Gpio(7, 'in'); var interval = setInterval(function() { console.log(infrared.readSync() ^ 1); }, 100); function exit() { infrared.unexport(); process.exit(); } process.on('SIGINT', exit); 问题是节点我总是得到相同的0信号,不pipe我做什么。 我试图通过使用一个简单的button来消除我的电路问题,甚至不工作(我使用pythontesting了相同的电路,并且工作正常)。 这甚至不使用它的asynchronous部分(因为没有发生中断,所以它也不起作用)。 我曾尝试使用GPIOpipe理导出我正在使用的引脚: pi@counter ~ […]

在节点中不可能安装包

我想安装一个树莓派3.我想安装和运行节点代码,但是在使用npm安装软件包时遇到问题。 我尝试了几个版本的节点(包括armhf最新和更旧的版本),但我总是得到以下错误(在安装槽[npm安装槽] groove@2.5.1 install /home/pi/node_modules/groove node-gyp rebuild make: Entering directory '/home/pi/node_modules/groove/build' CXX(target) Release/obj.target/groove/src/groove.o In file included from ../src/groove.cc:4:0: ../src/file.h:6:27: fatal error: groove/groove.h: Aucun fichier ou dossier de ce type #include <groove/groove.h> ^ compilation terminated. groove.target.mk:95: recipe for target 'Release/obj.target/groove/src/groove.o' failed make: *** [Release/obj.target/groove/src/groove.o] Error 1 make: Leaving directory '/home/pi/node_modules/groove/build' gyp ERR! build error gyp ERR! […]

节点红色TI sensortag

我从以下链接使用节点红色节点: https : //github.com/node-red/node-red-nodes/tree/master/hardware/sensorTag 它工作的很好,但我找不到改变读取间隔时间的选项。 有没有可能改变这个时间(例如500毫秒)?