小编Jim*_*ang的帖子

如何使用只有一个参考参数的可变长度参数列表?

最近我遇到了一个烦人的问题,我想定义这样的函数:

std::string my_sprintf(const char* format, ...)
{
    va_list args;
    va_start(args, format);
    ...
}
std::string my_sprintf(const std::string& format, ...)
{
    va_list args;
    va_start(args, format); // error
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是当使用变长参数列表时,似乎参考值不能是最后一个参数.

这是一种我可以让用户使用std :: string作为格式字符串的方法吗?

也许检测std :: string并将其转换为c_str()的因素或其他因素可行,但我不知道如何处理以下可变长度参数列表.

编辑:我没有使用可变参数模板因为我在里面使用了vsprintf.也许避免使用vsprintf并使用std :: stringstream是一个选项?

c++

8
推荐指数
1
解决办法
283
查看次数

如何使用 paramiko SSHClient 获得连续输出

我想 ssh 到远程服务器并运行一些 shell 脚本(如 scp 或 yum 等)。

一切都很顺利,除了我无法连续获得诸如 scp 进度或 yum 下载进度之类的标准输出。将f.read被阻止并且不会返回任何内容。

我猜 paramiko 可能会逐行传输假的标准输出流,但这些渐进输出不会输出行分隔符,而是输出“\r”。

有办法解决这个问题吗?

这就是我现在正在做的事情,在ssh哪里paramiko.SSHClient()

def read_buffer_line(f):
    line = ""
    while not f.channel.exit_status_ready():
        c = f.read(1)
        if c == '\n':
            yield line
            line = ''
        else:
            line += c
    yield line + f.read()

def ssh_run(ssh, cmd):
    stdin, stdout, sterr = ssh.exec_command(cmd, get_pty=True, bufsize=1)
    for l in read_buffer_line(stdout):
        print l
Run Code Online (Sandbox Code Playgroud)

python ssh paramiko python-2.7

0
推荐指数
1
解决办法
2019
查看次数

标签 统计

c++ ×1

paramiko ×1

python ×1

python-2.7 ×1

ssh ×1