在Google Colab上,使用:
! shell-command
非常糟糕。
这是一个测试:
import os
%timeit os.system('date > /dev/null')
%timeit ! date > /dev/null
给出输出:
100 loops, best of 3: 8.58 ms per loop
1 loop, best of 3: 1.56 s per loop
这使得! command
的使用速度比使用system()
的简单命令要慢180倍。
如何在仍然将stdout / stderr实时写入输出单元的同时避免使用! command
?
尤其是,我希望能够在单个屏幕行上显示诸如wget
的动态进度条之类的内容,但是我会选择一个解决方案,为每个进度条写一个新行更新。
答案 0 :(得分:0)
您可以尝试("Extent1"."SOME_STRING_COLUMN" IS NOT NULL)
。它的工作方式类似于subprocess.check_output
,但是您需要先将命令拆分为数组。
答案 1 :(得分:0)
Python Run External Command And Get Output On Screen or In Variable给出:
import subprocess, sys
## command to run - tcp only ##
cmd = "/usr/sbin/netstat -p tcp -f inet"
## run it ##
p = subprocess.Popen(cmd, shell=True, stderr=subprocess.PIPE)
## But do not wait till netstat finish, start displaying output immediately ##
while True:
out = p.stderr.read(1)
if out == '' and p.poll() != None:
break
if out != '':
sys.stdout.write(out)
sys.stdout.flush()
请注意,这不会捕获或打印STDERR。编辑欢迎。