我正在Python脚本中执行bash命令(下载文件)。
def execBashCmd(bash_cmd):
process = Popen([bash_cmd], stdout=PIPE, stderr=PIPE, shell=True)
bash命令在stdout中输出一个进程(刷新),如下所示:
Downloading File - 20.66 MiB/165.31 MiB
我希望能够定期调用python函数来更新我的python代码中的某个进程(我会用正则表达式或类似的东西)。
cmd = "gsutil cp -n ...." # A Bash command downloading a file and displaying a status in stdout while busy.
code = utils.execBashCmd(cmd)
self.setProgress(BASH_CURRENT_PROGRESS) # This line should be asynchrone and called upon the bash command lifetime
有没有办法实现这个目标?
答案 0 :(得分:0)
我希望能够在常规中调用python函数 更新进展的间隔(我会用正则表达式或 在我的python代码中的某处。
任何时候你都可以打电话给e。 G。 os.read(process.stdout.fileno(), 4096)
并获取bash命令的输出进度(可能是多次更新),前提是字节数足够大。如果您还没有想要阻止此呼叫,直到下一个进度输出(如果还没有),您可以使用
fcntl.fcntl(process.stdout, fcntl.F_SETFL, os.O_NONBLOCK)
并且做e。克。
try:
progress = os.read(process.stdout.fileno(), 4096)
except OSError:
# no progress data
pass