.sh文件可在终端中使用,但不能在python脚本中使用(带有Raspberry Pi的rclone)

时间:2018-07-17 15:49:48

标签: python-2.7 shell raspberry-pi

我无法在python中运行.sh文件。当我输入.sh文件的位置(/home/pi/file/script.sh)时,脚本会完美运行。

我正在尝试在python2脚本中运行此脚本,并且已完成以下方法:

subprocess.Popen(['bash', 'location of .sh'])
subprocess.call(['location of .sh'])
os.popen(['location of .sh'])

运行python脚本时,我从rclone收到提示,提示“命令同步最多需要2个参数”

我的.sh文件仅包含:

#!/bin/sh
sudo /usr/local/bin/rclone -v sync /home/pi/some_project_data remote:rclone --delete-before --include *.csv --include *.py

我不确定在终端上运行.sh文件的工作方式如何,但是当我尝试使用Python运行.sh文件时会弹出此错误。

2 个答案:

答案 0 :(得分:1)

无论何时在包含2个或更多.csv.py文件的目录中运行脚本,脚本都会失败。对于终端以及通过Python都是如此。

为避免这种情况,请引用您的模式,以便shell不会扩展它们:

#!/bin/sh
sudo /usr/local/bin/rclone -v sync /home/pi/some_project_data remote:rclone \
                           --delete-before --include "*.csv" --include "*.py"

答案 1 :(得分:0)

请尝试:

os.popen('bash locationof.sh') 

例如:

os.popen('bash /home/script.sh')

那在我的机器上工作了。如果您在字符串周围放置方括号,则python会假定它是一个列表,而popen不接受列表,它将接受一个字符串。

如果脚本不起作用,则无法解决该问题,但至少可以运行它。如果仍然无法正常运行,请尝试使用

之类的脚本运行脚本
touch z.txt

,然后查看z.txt是否出现在文件浏览器中。如果是这样,则您的.sh文件有问题。