成功:爲什麼subprocess.call(「」「scp foo」「」)壞了?
>>> scp_cmd = r"sudo scp -i /home/backup/.ssh/id_rsa /opt/backups/*conf [email protected]:/opt/backups/"
>>> subprocess.call(scp_cmd, shell=True)
1eadmin1.conf 100% 83KB 83.5KB/s 00:00
1stflr_1.conf 100% 2904 2.8KB/s 00:00
>>> scp_cmd = """sudo scp -i /home/backup/.ssh/id_rsa /opt/backups/*conf [email protected]:/opt/backups/"""
>>> os.system(scp_cmd)
1eadmin1.conf 100% 83KB 87.3KB/s 00:00
1stflr_1.conf 100% 2904 3.4KB/s 00:00
失敗:
>>> scp_cmd = r"""sudo scp -i /home/backup/.ssh/id_rsa /opt/backups/*conf [email protected]:/opt/backups/"""
>>> subprocess.call(scp_cmd, shell=True)
/opt/backups/*conf: No such file or directory
1
>>> subprocess.call(scp_cmd.split(' '))
/opt/backups/\*conf: No such file or directory
1
>>>
>>> subprocess.call(shlex.split(scp_cmd))
/opt/backups/*conf: No such file or directory
1
我很困惑,爲什麼在三重引號中失敗,當我用subprocess.call()
,而是通過當我使用os.system()
。處理三重引號字符串時,爲什麼subprocess.call()
和os.system()
之間有區別?
事實上,第一個'成功'的例子根本無法工作。它需要或者'shell = True'或者命令需要被分割。 –
@MikePennington:我覺得很難相信。 *其他東西*也改變了。 –
@Rob,你是對的,我在問題中解決了這個問題。然而,這並不能改變當我試圖用三重引號 –