通过Python子进程Popen执行SCP:“标识文件不可访问”

通过Python子进程Popen执行SCP:“标识文件不可访问”,python,python-3.x,subprocess,popen,scp,Python,Python 3.x,Subprocess,Popen,Scp,从subprocess.popen执行SCP时,我收到错误:警告:标识文件。/id\u rsa.key不可访问:没有这样的文件或目录。下面解释这个问题 我想使用python脚本将一个文件从本地机器SCP到远程机器,并且我想使用-I选项指定执行SCP时要使用的密钥 我的本地计算机是Windows 10 Enterprise。我的“远程”计算机当前是一个Docker容器,在本地主机上运行Alpine linux 当我在提升的shell中运行该命令时,它可以工作: scp -i ./id_rsa.ke

从subprocess.popen执行SCP时,我收到错误:警告:标识文件。/id\u rsa.key不可访问:没有这样的文件或目录。下面解释这个问题

我想使用python脚本将一个文件从本地机器SCP到远程机器,并且我想使用-I选项指定执行SCP时要使用的密钥

我的本地计算机是Windows 10 Enterprise。我的“远程”计算机当前是一个Docker容器,在本地主机上运行Alpine linux

当我在提升的shell中运行该命令时,它可以工作:

scp -i ./id_rsa.key -P 2222 ./test.plan root@127.0.0.1:/go/
当我通过Python 3.6 subprocess.popen执行命令时:

SSH = subprocess.Popen(['scp', '-i ./id_rsa.key', '-P 2222', './test.plan', 'root@127.0.0.1:/go/'],
    cwd = r'C:\ThePathToThisStuff',
    shell = False,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE
)
它会提示我输入密码,root@127.0.0.1的密码:,当我输入密码时,它会抛出下面的错误,表明它找不到RSA密钥:

<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'> ERROR: [b'Warning: Identity file  ./id_rsa.key not accessible: No such file or directory.\n']

我尝试过提供键的绝对路径,将参数列表中的每个命令分为选项和值、不同的分组等。

您不应该在同一个参数中组合选项及其参数,它们需要是单独的列表元素

SSH = subprocess.Popen(['scp', '-i', './id_rsa.key', '-P', '2222', './test.plan', 'root@127.0.0.1:/go/'],

您不应该将选项及其参数组合在同一个参数中,它们需要是单独的列表元素

SSH = subprocess.Popen(['scp', '-i', './id_rsa.key', '-P', '2222', './test.plan', 'root@127.0.0.1:/go/'],

./id\u rsa.key位于当前目录中。那是什么printos.getcwd?另外,您当前用户的名字是什么?您从哪里获得了scp可执行文件?谢谢您的来电。下面接受的答案解决了此问题。../id\u rsa.key位于您当前的目录中。那是什么printos.getcwd?另外,您当前用户的名字是什么?您从哪里获得了scp可执行文件?谢谢您的来电。下面被接受的答案解决了这个问题。所以,我将它们分开,它无法解析。有空的时候我会在这里发布完整的输出。我之前的评论是不正确的。它并没有因为分离的命令语法而无法解析,它只是触发了另一个被掩埋的错误。这是公认的答案。所以,我将它们分开,它无法解析。有空的时候我会在这里发布完整的输出。我之前的评论是不正确的。它并没有因为分离的命令语法而无法解析,它只是触发了另一个被掩埋的错误。这是公认的答案。