我已经在运行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的方式
CD
unzip 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 /
sudo mandb
rclone config
答案 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)