Python脚本运行Bash命令

时间:2018-03-11 16:53:38

标签: python bash python-3.x

我正在尝试在Bash上运行脚本,以便将文件从本地计算机传输到网络上的远程计算机。 bash命令是 :

scp \local\path\ user@remoteip:\path\to\copy\onremote

到目前为止,这个工作正常,所以我想我会使用python脚本自动化它。 这就是我想出的:

import subprocess
direct = input("Enter path to directory: ")
send = "scp " + direct + " user@remoteip:\path\to\copy\onremote"
subprocess.Popen(send)

出于某种原因,它没有用,有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这里的问题是Popen()需要一个列表。因此,解决方案是将字符串拆分为其空格formatted = send.split(" ")。根据使用Popen()或call()的问题,这里有一个很好的答案,详细说明了这些差异。What's the difference between subprocess Popen and call (how can I use them)?

这是一个适合我的东西,使用subprocess call()。

from subprocess import call
direct = input("Enter path to directory: ")
send = "scp" + direct + " user@remoteip:\path\to\copy\onremote"
formatted = send.split(" ")
call([formatted])

答案 1 :(得分:1)

建议您将参数列表传递给
subprocess.Popen(["scp", "-r", "path", ...])

但是,如果您仍想传入整个字符串,请传递一个可选的shell参数,例如
subprocess.Popen(send, shell=True)