成功:
>>> scp_cmd = r"sudo scp -i /home/backup/.ssh/id_rsa /opt/backups/*conf backup@a-hostname.local:/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 backup@a-hostname.local:/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
失败:
^{pr2}$我很困惑,为什么我使用subprocess.call()
时三重引号失败,而当我使用os.system()
时却失败了。在处理三重引号字符串时,subprocess.call()
和{
马蒂恩说的每件事都是+1,我想我可能知道发生了什么。此输出:
我觉得很可疑。为什么会有反斜杠?
尽我所能匹配你的命令,我得到了类似[仅抑制用户名]:
^{pr2}$因为正如所解释的,它们是同一个字符串。但如果你不小心在里面加了反斜杠?你会得到
它与您的输出完全匹配
shell=True
或shlex.split()
的输出中没有反斜杠,但是.split(" ")
有反斜杠。为了进行比较,如果没有反斜杠,则应该得到错误消息所以在我看来,您发布的
scp_cmd
并不是您的输出实际对应的那个,而且您真正的输出有一个反斜杠。在我很肯定你在做其他不同的事情;三重引用在这里根本没有什么不同:
使用三重引号只是指定python字符串文本的一种方法。指定该文本(带或不带
r
原始前缀、单引号或三引号、使用单'
或双"
引号)的方式不会保留。在三重引号的作用是当你加入一行新行时:
^{pr2}$但您的示例中根本不包含任何换行符。在
相关问题 更多 >
编程相关推荐