Python中文
首页
教程
问答
标签
搜索
登录
注册
Cronjob:Python脚本未写入fi
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在研究raspbian并编写了一个python脚本,它通过RS232与一些与Raspberry的pysical IO状态相关的硬件进行通信。它还写入日志文件。在</p> <p>当我从命令行启动脚本时,一切正常: <code>pi@raspberrypi ~/scripts $ python steppercontrol.py</code></p> <p>我添加了一个cronjob(<code>sudo crontab -e</code>)</p> <pre><code>SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games @reboot /usr/bin/python /home/pi/scripts/steppercontrol.py </code></pre> <p>脚本可以工作并在重新启动后运行,但日志文件未写入 syslog给出了以下内容</p> ^{pr2}$ <p>chmods应该正常:</p> <pre><code>pi@raspberrypi ~/scripts $ ls -lh total 16K -rwxr-xr-x 1 pi pi 3.1K May 27 12:55 steppercontrol.py -rwxrwxrwx 1 pi pi 249 May 29 12:05 stepperlog </code></pre> <p>在我看来,它与python本身无关。我也无法将stdout从脚本(作为cronjob)重定向到文件。我迷路了,这是我的剧本:</p> <p>顺便说一句:这是我的第一个python脚本,通常我对linux不是很在行,但是raspbian和google使事情变得简单;-)</p> <pre><code>import serial import time import pifacedigitalio as p import datetime # function to read data by busy waiting # timeout is enable, non blocking def getData( p ): "get data busy waiting" d = '' if p.inWaiting() <= 0: return d time.sleep(0.3) while p.inWaiting() > 0: d += p.read(1) return d # end of function # main program logig # init serial communication port = serial.Serial("/dev/ttyUSB0", bytesize=serial.EIGHTBITS, baudrate=9600, stopbits=serial.STOPBITS_TWO, timeout=1.0) p.init() for i in range(0,8): p.digital_write(i,0) p.digital_write_pullup(i, 1) logfile = open('/home/pi/scripts/stepperlog','a') i = datetime.datetime.now() logfile.write(str(i) + " script started \n") print(str(i) + " script started \n") # query hello world string and write answer to screen port.write("?ver\r") d = getData(port) print(">> " + d + "\n") port.write("!a\r") # setup stepper drive port.write("!axis 1 0 0\r") # disable all axis excep X-axis port.write("!pitch 1 1 1\r") # set pitch of rod ... needed? port.write("!cur 1 1 1\r") # set current per motor to 1 A port.write("!accel 0.5 0.5 0.5\r") # set accelleration to value in m/s^2 port.write("!velfac 0.1 0.1 0.1\r") # reduce speed by facor 1/10 pinList = [0,0,0,0,0,0] prevSelection = -2 while 1: for i in range(0,6): pinList[i] = p.digital_read(i) p.digital_write(i,pinList[i]) #print(">> I/O " + str(i) + " : " + str(pinList[i])) speed = 0; curSelection = -1 if pinList[0] == 1: # position 1 speed = 5; # move down fast 5mm/s curSelection = 0 elif pinList[1] == 1: # position 3 speed = -0.1; # move up 50 um/s curSelection = 1 elif pinList[2] == 1: # position 5 speed = -0.2; # move up 100 um/s curSelection = 2 elif pinList[3] == 1: # position 7 speed = -0.3; # move up 100 um/s curSelection = 3 elif pinList[4] == 1: # position 9 speed = -0.4; # move up 100 um/s curSelection = 4 elif pinList[5] == 1: # position 11 speed = -5; # move up fast 5 mm/s curSelection = 5 calcspeed = float(speed) calcspeed *= 10/1.36 # factor 10/100 corresponds to speed reduction from above ! if curSelection != prevSelection: i = datetime.datetime.now() logfile.write(str(i) + " " + str(prevSelection) + " " + str(curSelection) + " " + str(speed) + " " + str(calcspeed) + "\n") print(str(i) + " " + str(prevSelection) + " " + str(curSelection) + " " + str(speed) + " " + str(calcspeed)) prevSelection = curSelection speed = "%.10f" % calcspeed # float to string port.write("!speed" + speed + "\r") wait = 0.1 time.sleep(float(wait)) </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>最终答案是显而易见的! 我没有刷新输出。对于stdout,stderr:</p> <pre><code>import sys sys.stdout.flush() sys.stderr.flush() </code></pre> <p>打开的文件:</p> ^{pr2}$
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
区分轴上的像素大小
2 回答
区分过度拟合与良好预测
1 回答
区分通过POST接收的数据并在Cherrypy中获取
10 回答
区分重写和重载
8 回答
区分金贾二号的类型
10 回答
区别:IF IN和IF==python
10 回答
区别:list.append()与incrementequal?
3 回答
区别:创建在启动wx应用程序时不“阻止”控制台的脚本
4 回答
区别于python中的命令行和CGI
5 回答
区别关系
1 回答
区别是什么APIClient.enforce\ csrf\检查以及APIClient.handler.enforce\ csrf\ u检查
9 回答
区块.draw()未在python空闲模式下工作
7 回答
区块链API调用输出对象名称而不是内容
4 回答
区块链nonce值随负载变化
6 回答
区块链Python语法错误(Snakecoin)
1 回答
区块链不连接到服务器和矿工
1 回答
区块链信息钱包支票支付员
4 回答
区块链和区块链密码错误
7 回答
区块链尝试向Transaction字典添加键/值以创建区块链
9 回答
区域:IOError:[Errno 22]无效模式('w')或filenam
6 回答