最近我遇到了一个烦人的问题,我想定义这样的函数:
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是一个选项?
我想 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)