我的程序以这种方式安全地复制:subprocess.run(scp -P 22 username@address.com:path/to/file $HOME/Downloads)
。
但它给了我以下错误:FileNotFoundError: [Errno 2] No such file or directory: 'scp -P 22 username@address.com:path/to/file $HOME/Downloads
。
然而,像添加subprocess.run(scp -P 22 username@address.com:path/to/file $HOME/Downloads, shell=True)
一样添加shell=True
可以修复它
为什么?有没有办法绕过它,或者shell=True
是必不可少的?
如果您查看文档,您会发现subprocess.run
实际上想要一个值列表,而不是一个字符串:
subprocess.run( ["scp", "-P", "22",
"username@address.com:path/to/file"
"$HOME/Downloads"] )
然而,这里还有另一个问题。$HOME
是一个shell变量。如果你不使用shell=True
,那么你需要自己扩展它:
subprocess.run( ["scp", "-P", "22",
"username@address.com:path/to/file",
os.environ["HOME"]+"/Downloads"] )
您不需要指定"-P 22〃;。这是ssh的默认端口。