Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python运行Linux shell cmd,无法加载配置文件_Python_Linux_Bash_Shell - Fatal编程技术网

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

从python运行Linux shell cmd,无法加载配置文件,python,linux,bash,shell,Python,Linux,Bash,Shell,我在运行Debian的raspberry pi上安装了一个名为rclone的备份程序,我已经成功地在shell中运行cmd将文件夹备份到google drive,但我确实需要能够在每次使用python脚本拍照时都这样做,与其他人相比,我在Linux方面的经验很少,我认为如果我用一个基本的shebang #!/bin/sh 或 然后是下面的命令 rclone copy /var/www/html/camera_images pictures::folder1 然后我将.sh文件设置为可执行

我在运行Debian的raspberry pi上安装了一个名为rclone的备份程序,我已经成功地在shell中运行cmd将文件夹备份到google drive,但我确实需要能够在每次使用python脚本拍照时都这样做,与其他人相比,我在Linux方面的经验很少,我认为如果我用一个基本的shebang

 #!/bin/sh 

然后是下面的命令

rclone copy /var/www/html/camera_images pictures::folder1
然后我将.sh文件设置为可执行文件,如果我在文件夹中单击它并执行,但如果我尝试用

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

我在shell中得到一个错误

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

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

如何从python运行copy cmd或脚本来执行此操作

这就是我安装rclone的方式

  • 光盘

  • wget

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

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

  • sudo cp rclone/usr/sbin/

  • sudo chown root:root/usr/sbin/rclone

  • sudo chmod 755/usr/sbin/rclone

  • sudo mkdir-p/usr/local/share/man/man1

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

  • 苏多曼达

  • rclone配置

  • 在rclone命令中使用--config

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

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

    您应该使用
    子流程
    模块,而不是
    os.system

    您可以使用创建进程并为其提供工作目录

    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 字符串,该字符串指定要通过shell执行的命令。 这意味着字符串的格式必须与实际格式完全相同 当在shell提示符下键入时。这包括,例如,引用或 反斜杠转义文件名,其中包含空格。如果args是 顺序,第一项指定命令字符串,以及 附加项将被视为shell的附加参数 它本身。也就是说,波本做的相当于:

    谢谢大家:)

    我现在和它一起工作

    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)
    

    确保您的rclone程序在您的系统路径中包含rclone.exe的rclone文件夹在我的根目录/home/pi中,我可以打开shell并键入cmd rclone copy/var/www/html/camera_images pictures::folder1,即使我更改了目录,它也可以工作。确定删除
    sh
    前缀并告诉usk 1 min i刚开始加载我尝试了os.system('/home/pi/py/upload.sh')和os.system('rclone copy/var/www/html/camera_images pictures::folder1')我都给出了相同的消息,未能加载配置文件“/root/.config.conf”-使用默认值:open/root/.rclone.conf:没有这样的目录。
    sh: 0: Cant open rclone.
    
    subprocess.Popen(your_command, cwd=path_to_your_executable_dir, shell=True)
    
    os.system(' rclone copy --config /home/pi/.rclone.conf /var/www/html/camera_images pictures::folder1 ')
    
    subprocess.Popen('rclone copy --config /home/pi/.rclone.conf /var/www/html/camera_images pictures::folder1', shell=True)