2016-12-28 48 views
1

我在运行Debian的我的树莓派上安装了一个名为rclone的备份程序,我已成功运行shell中的cmd以备份文件夹到谷歌驱动器,但是我真正需要的是能够每次带着我的python脚本中的照片的话,我对Linux的一点经验比别人,我想,如果我做了一个shell脚本的基本家当Linux从python运行shell cmd,无法加载配置文件

#!/bin/sh 

#!/bin/bash 

然后cmd低于

rclone copy /var/www/html/camera_images pictures::folder1 

我遂作出上述sh文件的可执行文件,如果我只要按一下它的文件夹中,然后执行此工作,但如果我尝试打电话给蟒蛇是.SH脚本

os.system('sh /home/pi/py/upload.sh') 

os.system(' rclone copy /var/www/html/camera_images pictures::folder1 ') 

我得到了壳的错误说

Failed to load config file "/root/.rclone.conf" using default - no such directory. 

但是.conf应该位于/ home/pi中。如果我尝试

os.system(' sh rclone copy /var/www/html/camera_images pictures::folder1 ') 

我得到

sh: 0: Cant open rclone. 

我如何可以运行CMD复制或脚本从蟒蛇这样做呢?

这是我如何安装rclone

  1. CD

  2. http://downloads.rclone.org/rclone-v1.34-linux-arm.zip的wget

  3. 解压rclone-v1.34-linux-arm.zip

  4. cd rclone-v1.34-linux-arm

  5. 须藤CP rclone/usr/sbin目录/

  6. 须藤CHOWN根:根/ usr/sbin目录/ rclone

  7. 须藤搭配chmod 755/usr/sbin目录/ rclone

  8. 须藤MKDIR -p/USR/local/share/man/man1

  9. sudo cp rclone。1在/ usr/local/share下/人/男1/

  10. 须藤mandb

  11. rclone配置

+0

确保您rclone程序在你的系统路径 –

+0

包含rclone.exe的rclone文件夹在我的根目录/ home/PI理所应当的,我可以只需打开外壳并键入cmd中rclone复制/ var/www/html/camera_images图片:: folder1和它工作,即使我改变目录。 –

+0

确定删除了'sh'前缀并告诉我们 –

回答

0

谢谢你的每一个:)

我现在用

os.system(' rclone copy --config /home/pi/.rclone.conf /var/www/html/camera_images pictures::folder1 ') 

注意工作,如果我把SH在开始时,我得到了错误sh:0:不能打开rclone,虽然我昨天读了关于在最后作为返回值放置:0:?无论哪种方式,它的工作没有sh。

和子过程的作品,我将使用。

subprocess.Popen('rclone copy --config /home/pi/.rclone.conf /var/www/html/camera_images pictures::folder1', shell=True) 
2

使用--config在rclone命令

从文档: - -config字符串配置文件。 (默认是/home/ncw/.rclone.conf)

你的命令应该是这样的: os.system('sh rclone copy --config /home/pi/.rclone.conf/var/www/html/camera_images图片::文件夹1“)

1

您应该使用subprocess模块,而不是os.system

您可以使用subprocess.Popen创建一个进程,并给它一个工作目录。

subprocess.Popen(your_command, cwd=path_to_your_executable_dir, shell=True) 

(使用shell=True在其他便利中传递一个简单的字符串命令)。

shell参数(默认为False)指定是否将shell作为要执行的程序使用 。如果shell为True,建议将作为字符串传递,而不是作为序列传递。

在使用shell = True的Unix上,shell默认为/ bin/sh。如果args是 字符串,则字符串将指定通过shell执行的命令。 这意味着字符串的格式必须与在shell提示符下键入时的格式完全相同,即 。这包括,例如,在其中包含空格的引号或 反斜杠转义文件名。如果参数是 序列,则第一项指定命令字符串,并且任何其他项目将被视为壳体 本身的附加参数。也就是说,POPEN不等价的:....