成功:为什么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,你是对的,我在问题中解决了这个问题。然而,这并不能改变当我试图用三重引号 –