我了解到在Python中执行命令时,我应该使用子进程.我想要实现的是通过ffmpeg编码文件并观察程序输出直到文件完成.Ffmpeg将进度记录到stderr.
如果我尝试这样的事情:
child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE)
complete = False
while not complete:
stderr = child.communicate()
# Get progress
print "Progress here later"
if child.poll() is not None:
complete = True
time.sleep(2)
Run Code Online (Sandbox Code Playgroud)
调用child.communicate()并等待命令完成后,程序不会继续.还有其他方法可以跟随输出吗?
是否有可能 - 除了使用.txt/dummy文件之类的东西 - 将值从一个程序传递到另一个程序?
我有一个程序,它使用.txt文件将起始值传递给另一个程序.每次运行程序时,我都会在启动程序之间更新文件中的值(十次,基本上同时).这样做很好,但是我希望将'child'程序报告在完成后返回到'mother'程序,并报告它找到的下载文件.
是否有可能在不使用11个文件的情况下执行此操作(对于'child'到'mother'报告的每个实例都有一个,而'mother'到'child'的一个文件)?我说的是完全独立的程序,而不是类或函数或类似的东西.
为了有效地运作,而不是等待几个小时完成所有事情,我需要"孩子"程序运行十次并更快地完成任务.因此,我运行子程序十次,并给每个程序一个单独的范围来检查.
两个程序都运行良好,但我希望让它们相互运行/报告,并希望不使用文件"传输"来完成任务,特别是在数据传输的子母方面.
'母亲'计划......目前
import os
import sys
import subprocess
import time
os.chdir ('/media/')
#find highest download video
Hival = open("Highest.txt", "r")
Histr = Hival.read()
Hival.close()
HiNext = str(int(Histr)+1)
#setup download #1
NextVal = open("NextVal.txt","w")
NextVal.write(HiNext)
NextVal.close()
#call download #1
procs=[]
proc=subprocess.Popen(['python','test.py'])
procs.append(proc)
time.sleep(2)
#setup download #2-11
Histr2 = int(Histr)/10000
Histr2 = Histr2 + 1
for i in range(10):
Hiint = str(Histr2)+"0000"
NextVal = open("NextVal.txt","w")
NextVal.write(Hiint)
NextVal.close()
proc=subprocess.Popen(['python','test.py'])
procs.append(proc)
time.sleep(2)
Histr2 = Histr2 + …
Run Code Online (Sandbox Code Playgroud)