【发布时间】:2018-02-01 18:08:19
【问题描述】:
我有一个稍微复杂的rsync 命令,需要由python 程序定期执行。
enter code here
该命令可以从命令行正确执行,但是当使用subprocess.run() 运行时,包含/排除过滤器似乎被忽略了。
该命令旨在通过ssh 在一对Raspberry Pi3 之间同步某些数据文件。 Pi 在 Raspbian jessie 下运行 Python 3.5.2 和 rsync 3.11。
这是我从 ipython 会话执行的测试代码。
In [3]: def testrsync():
...: from subpro`enter code here`cess import run
...: cmd = ("rsync -avzhe ssh -i --include='*.zip' --include='data.csv' "
...: "--exclude='*' pi@192.168.1.122:/home/pi/pgcdata/ "
...: "/tmp/pgcdata")
...: cmdlist = cmd.split()
...: print(cmd)
...: ret = run(cmdlist, shell=False)
...: print(ret)
...:
...:
In [4]: testrsync()
rsync -avzhe ssh -i --include='*.zip' --include='data.csv' --exclude='*' pi@192.168.1.122:/home/pi/pgcdata/ /tmp/pgcdata
receiving incremental file list
created directory /tmp/pgcdata
cd+++++++++ ./
>f+++++++++ data-2018-01-24.csv.zip
>f+++++++++ data-2018-01-25.csv.zip
>f+++++++++ data-2018-01-26.csv.zip
>f+++++++++ data-2018-01-27.csv.zip
>f+++++++++ data-2018-01-28.csv.zip
>f+++++++++ data-2018-01-29.csv.zip
>f+++++++++ data-2018-01-30.csv.zip
>f+++++++++ data-2018-01-31.csv
>f+++++++++ data.csv
>f+++++++++ four-hour-plot.csv
>f+++++++++ one-day-plot.csv
>f+++++++++ seven-day-plot.csv
>f+++++++++ thirty-day-plot.csv
sent 312 bytes received 731.54K bytes 162.63K bytes/sec
total size is 35.49M speedup is 48.49
CompletedProcess(args=['rsync', '-avzhe', 'ssh', '-i', "--include='*.zip'", "--include='data.csv'", "--exclude='*'", 'pi@192.168.1.122:/home/pi/pgcdata/', '/tmp/pgcdata'], returncode=0)
上面的最后四个文件不应该被复制。如果我清空目标目录,复制打印的 rsync 命令并将其作为 shell 命令运行,则会发生过滤并且只复制所需的文件。
In [5]: !rm -rf /tmp/pgcdata/
In [6]: !rsync -avzhe ssh -i --include='*.zip' --include='data.csv' --exclude='*' pi@192.168.1.122:/home/pi/pgcdata
...: / /tmp/pgcdata
receiving incremental file list
created directory /tmp/pgcdata
cd+++++++++ ./
>f+++++++++ data-2018-01-24.csv.zip
>f+++++++++ data-2018-01-25.csv.zip
>f+++++++++ data-2018-01-26.csv.zip
>f+++++++++ data-2018-01-27.csv.zip
>f+++++++++ data-2018-01-28.csv.zip
>f+++++++++ data-2018-01-29.csv.zip
>f+++++++++ data-2018-01-30.csv.zip
>f+++++++++ data.csv
【问题讨论】:
标签: python-3.x subprocess rsync