Python的解释器默认启用输出缓冲sys.stdout
吗?
如果答案是肯定的,那么禁用它的所有方法是什么?
建议到目前为止:
-u
命令行开关sys.stdout
在每次写入后刷新的对象PYTHONUNBUFFERED
env varsys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
是否有任何其他方式来设置一些全局标志sys
/ sys.stdout
程序执行过程中?
我尝试使用 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) 我有一个函数来检查文件是否存在,它返回'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)
有没有其他方法可以实现这一目标?