【发布时间】:2015-08-14 10:13:39
【问题描述】:
我正在尝试使用 ssh2 模块流式传输 cat 命令,但它只是在执行的某个时间点挂起。我正在执行cat there.txt where.txt 大约 10 MB 左右。
例如:
local = fs.createWriteStream('here.txt');
conn.exec('cat there.txt', function(err, stream) {
if (err) throw err;
stream.pipe(local).on('finish, function() { console.log('Done'); });
}
这只是在某一时刻完全停止。我什至将流通过管道传输到本地标准输出,但它会在一段时间后挂起。在我的实际代码中,我将它通过一堆其他转换流传输,所以我认为这比先将文件传输到本地系统更好(文件可能会大于 200MB)。
【问题讨论】:
-
我知道这并不能完全回答你的问题,但你不能直接scp 吗?
-
我应该提到我还想将它用于我在远程服务器上执行的命令,这些命令不一定输出文件(仅输出到标准输出)。我不确定什么会更快:1)将命令的输出写入远程文件,将该文件传输到本地服务器,然后对其进行转换,然后将其写入本地文件。或 2) 让它们像它们一样输出到标准输出并将其流式传输到本地服务器,对其进行转换,然后将其写入本地文件。
-
“挂起”是什么意思?你的意思是本地进程还在运行吗?如果是这样,您需要在 exec 流关闭时(或者当您的可写 fs 流完成时,无论哪种方式)结束连接。 FWIW 我已经用一个 10MB 的文件反复尝试了你的代码,它每次都对我有用。
-
另外,您能说说您使用的 ssh2 模块版本和 node/io.js 版本吗?
-
我刚刚更新到 0.4.8,我也遇到了同样的问题。通过挂起,我的意思是一些数据被传输到我的本地 fs 流,但是 ssh 流在传输 25% 的数据后不再通过管道传输任何东西。即使远程服务器上的进程仍在运行。