我正试图用树莓在启动时运行python3脚本。python脚本包含一个子流程调用,这给我带来了问题。我怀疑这个问题与streamlink调用的PATH有关,但我无法解决它。
脚本:
#!/usr/bin/env python3
import subprocess
def streamlistener(streamname):
try:
print('Listening to stream: ',streamname)
grepOut = subprocess.check_output(['streamlink','-p','omxplayer','-a','--timeout 20', '--player-fifo','--retry-strea$
print(grepOut.decode())
streamlistener(streamname)
except subprocess.CalledProcessError as e:
print("ERRORS: " , e.output.decode())
streamlistener(streamname)
streamlistener('STREAMNAME')
crontab(没有sleep命令的结果相同(:
@reboot sleep 60 && sudo python3 /home/pi/Desktop/stream.py 2>&1 | logger -p user.debug -t 'stream'
我得到的错误信息:
Jun 28 17:40:39 raspberrypi stream: Traceback (most recent call last):
Jun 28 17:40:39 raspberrypi stream: File "/home/pi/Desktop/stream.py", line 26, in <module>
Jun 28 17:40:39 raspberrypi stream: streamlistener('northernstreaming')
Jun 28 17:40:39 raspberrypi stream: File "/home/pi/Desktop/stream.py", line 19, in streamlistener
Jun 28 17:40:39 raspberrypi stream: grepOut = subprocess.check_output(['streamlink','-p','omxplayer','-a','--timeout 20', '--pla$
Jun 28 17:40:39 raspberrypi stream: File "/usr/lib/python3.7/subprocess.py", line 395, in check_output
Jun 28 17:40:39 raspberrypi stream: **kwargs).stdout
Jun 28 17:40:39 raspberrypi stream: File "/usr/lib/python3.7/subprocess.py", line 472, in run
Jun 28 17:40:39 raspberrypi stream: with Popen(*popenargs, **kwargs) as process:
Jun 28 17:40:39 raspberrypi stream: File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
Jun 28 17:40:39 raspberrypi stream: restore_signals, start_new_session)
Jun 28 17:40:39 raspberrypi stream: File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
Jun 28 17:40:39 raspberrypi stream: raise child_exception_type(errno_num, err_msg, err_filename)
Jun 28 17:40:39 raspberrypi stream: FileNotFoundError: [Errno 2] No such file or directory: 'streamlink': 'streamlink'
问题与用于安装streamlink的PATH pip3有关,而与子进程无关。check_output调用,在bashrc和crontab开始时正确设置路径都有效。
在bashrc中设置路径:https://linuxize.com/post/how-to-add-directory-to-path-in-linux/
正在cron中设置路径:https://unix.stackexchange.com/questions/148133/how-to-set-crontab-path-variable