相关疑难解决方法(0)

禁用输出缓冲

Python的解释器默认启用输出缓冲sys.stdout吗?

如果答案是肯定的,那么禁用它的所有方法是什么?

建议到目前为止:

  1. 使用-u命令行开关
  2. 包装sys.stdout在每次写入后刷新的对象
  3. 设置PYTHONUNBUFFEREDenv var
  4. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

是否有任何其他方式来设置一些全局标志sys/ sys.stdout程序执行过程中?

python stdout buffered

487
推荐指数
10
解决办法
25万
查看次数

Paramiko ssh 死/挂,输出大

我尝试使用 Paramiko 和 ssh 来备份服务器以调用tar命令。当文件数量有限时,一切正常,但当文件夹很大时,脚本会无休止地等待。下面的测试告诉我问题出在标准输出的大小上。

有没有办法纠正它并执行这种命令?

案例大输出:

query = 'cd /;ls -lshAR -h'
chan.exec_command(query)
while not chan.recv_exit_status():
    if chan.recv_ready():
        data = chan.recv(1024)
        while data:
            print data
            data = chan.recv(1024)

    if chan.recv_stderr_ready():
        error_buff = chan.recv_stderr(1024)
        while error_buff:
            print error_buff
            error_buff = chan.recv_stderr(1024)
    exist_status = chan.recv_exit_status()
    if 0 == exist_status:
        break
Run Code Online (Sandbox Code Playgroud)

结果是(不行 - 阻止 - 死??)

query = 'cd /;ls -lshAR -h'
chan.exec_command(query)
while not chan.recv_exit_status():
    if chan.recv_ready():
        data = chan.recv(1024)
        while data:
            print data
            data = chan.recv(1024)

    if chan.recv_stderr_ready(): …
Run Code Online (Sandbox Code Playgroud)

python ssh paramiko

5
推荐指数
1
解决办法
2234
查看次数

将远程(Paramiko)ssh 命令的输出评估为成功/失败布尔值

我有一个函数来检查文件是否存在,它返回'True'/ 'False',现在我正在将它“转换”为 bool eval(),但是我认为这不是最聪明的解决方案,但我不知道该怎么做它没有不必要的ifs

>>> foo = 'False'
>>> type(eval(foo))
<class 'bool'>
>>> type(foo)
<class 'str'>
Run Code Online (Sandbox Code Playgroud)

例如,我在 ssh 连接的机器上运行这个表达式

"test -e {0} && echo True || echo False".format(self.repo)
Run Code Online (Sandbox Code Playgroud)

像这样,我的结果将是字符串。

def execute(command):
    (_, stdOut, _) = ssh.exec_command(command)
    output = stdOut.read()
    return output.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以实现这一目标?

python ssh shell paramiko

2
推荐指数
1
解决办法
642
查看次数

标签 统计

python ×3

paramiko ×2

ssh ×2

buffered ×1

shell ×1

stdout ×1