Linux从python运行shell cmd,无法加载配置文件

时间:2016-12-28 14:22:28

标签: python linux bash shell

我已经在运行Debian的raspberry pi上安装了一个名为rclone的备份程序,我已成功运行shell中的cmd来备份google驱动器的文件夹,但我确实需要每次都能够这样做用我的python脚本拍照,我在Linux上的经验比其他人少,我想如果我用一个基本的shebang做了一个shell脚本

 #!/bin/sh 

 #!/bin/bash 

然后是下面的cmd

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

然后我创建了.sh文件可执行文件,如果我只是在文件夹中单击它并执行但是如果我尝试从python中调用该.sh脚本

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

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

我在shell中遇到错误

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.

如何从python运行copy cmd或脚本?

这就是我安装rclone的方式

  1. CD

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

  3. unzip rclone-v1.34-linux-arm.zip

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

  5. sudo cp rclone / usr / sbin /

  6. sudo chown root:root / usr / sbin / rclone

  7. sudo chmod 755 / usr / sbin / rclone

  8. sudo mkdir -p / usr / local / share / man / man1

  9. sudo cp rclone.1 / usr / local / share / man / man1 /

  10. sudo mandb

  11. rclone config

3 个答案:

答案 0 :(得分:2)

在你的rclone命令中使用--config

来自docs: --config string配置文件。 (默认为/home/ncw/.rclone.conf")

您的命令应如下所示: os.system(' sh rclone copy --config /home/pi/.rclone.conf / var / www / html / camera_images pictures :: folder1')

答案 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,则为   建议将args作为字符串而不是序列传递。

     

在Unix上,shell = True,shell默认为/ bin / sh。如果args是   string,string指定通过shell执行的命令。   这意味着字符串必须完全按照原样进行格式化   在shell提示符下键入时。这包括,例如,引用或   反斜杠转义文件名,其中包含空格。如果args是   sequence,第一项指定命令字符串,以及任何   其他项目将被视为shell的附加参数   本身。也就是说,Popen相当于:....

答案 2 :(得分:0)

谢谢大家:)

我现在正在使用

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

请注意,如果我把sh放在开头我得到了错误sh:0:虽然我昨天读到了关于这样的东西:0结尾作为返回值,但是不能打开rclone?无论哪种方式都没有sh。

并且子过程也可以使用,我将改为使用。

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