从python运行Linux shell cmd,无法加载配置文件
我在运行Debian的raspberry pi上安装了一个名为rclone的备份程序,我已经成功地在shell中运行cmd将文件夹备份到google drive,但我确实需要能够在每次使用python脚本拍照时都这样做,与其他人相比,我在Linux方面的经验很少,我认为如果我用一个基本的shebang从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文件设置为可执行
#!/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的方式
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)