The*_*Jug 18 python sftp subprocess
我正在尝试使用python子进程模块登录到一个安全的ftp站点,然后获取一个文件.但是,我一直在试图在请求密码时发送密码.到目前为止,我有以下代码:
from subprocess import Popen, PIPE
proc = Popen(['sftp','user@server', 'stop'], stdin=PIPE)
proc.communicate('password')
Run Code Online (Sandbox Code Playgroud)
这仍然在密码提示符处停止.如果我手动输入密码,则转到ftp站点,然后在命令行输入密码.我见过人们建议使用pexpect,但长话短说我需要一个标准的库解决方案.无论如何还有子进程和/或任何其他stdlib?我上面忘记了什么?
尝试
proc.stdin.write('yourPassword\n')
proc.stdin.flush()
Run Code Online (Sandbox Code Playgroud)
这应该工作.
你所描述的内容听起来就像stdin=None子进程继承了父进程的stdin(你的Python程序).
小智 6
from subprocess import Popen, PIPE\n\nproc = Popen(['sftp','user@server', 'stop'], stdin=PIPE)\nproc.communicate(input='password')\nRun Code Online (Sandbox Code Playgroud)\n\n尝试在通信中使用 input=\xe2\x80\x98password\xe2\x80\x99 ,这对我有用。
\n用于ParamikoSFTP。对于其他任何事情,这都有效:
import subprocess
args = ['command-that-requires-password', '-user', 'me']
proc = subprocess.Popen(args,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
proc.stdin.write('mypassword\n')
proc.stdin.flush()
stdout, stderr = proc.communicate()
print stdout
print stderr
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38016 次 |
| 最近记录: |