如何写入一个Yun进程的stdin()?

问题描述:

我如何写一个草图Bridge Process启动的Arduino Yun Linux进程的stdin?如何写入一个Yun进程的stdin()?

背景:我有一个控制和日志记录应用程序,需要通过Temboo.com登录到Google Drive电子表格。我使用Temboo示例中提供的Arduino草图进行工作。但是我的素描太大,不适合可用的AVR存储器,所以我想分解它:AVR端的控制和数据采集,以及Linux端的Python-Temboo。

我开始用这个简单的Python脚本stdinFile.py测试:

import sys 
# Read the string from stdin 
rowData = sys.stdin.readline() 
f = open("blah.txt","w") 
f.write(rowData) 
f.close 
sys.exit(0) 

我从一个SSH会话调用它,并输入一串字符。它的工作原理:stdin被写入文件!

[email protected]:~# python /root/stdinFile.py 
adsfsadfdsaf 
[email protected]:~# cat blah.txt 
adsfsadfdsaf 

但是我该如何从Arduino草图中做到这一点?该Process.run()方法阻止所以这没有工作 - 进程受阻之前写的草图:

Process p; // Create a process and call it "p" 
p.begin("python"); // Process to launch the "Python" command 
p.addParameter("/root/stdinFile.py"); // Add the script name to "python" 
p.run(); // this is blocking! Script stalls here waiting for stdin 

char record[]="2015-09-06,21:20:00,F,T,F,F,18.3,18.4,19.3,19.4,30.6,28.6"; 
for(char * src = record; *src != '\0'; src++) { 
    p.write(*src); 
} 
p.flush(); 

我也试过p.run()之前做的写操作,换句话说,馅标准输入在脚本运行之前流,但是也没有给出任何结果。

谢谢!

您可以尝试使用p.runAsynchronously()而不是p.run()。 runAsynchronously()是非阻塞的,您可以使用p.running()检查脚本是否仍在运行。您可以在以下链接中找到加工类的文档:

https://www.arduino.cc/en/Reference/YunProcessConstructor