除了使用类似于.txt /虚拟文件之类的东西,是否有可能从一个程序传递值到另一个程序?
我有一个程序,它使用.txt文件将起始值传递给另一个程序。每次运行它时(基本上同时运行十次),我在启动程序之间更新文件中的值。这样做很好,但我希望在“子”程序完成时,“子”程序向“母”程序报告,并报告它发现要下载的文件。是否可以这样做,而不使用11个文件来实现(这是每个“子”到“母”报告的一个文件,以及一份“母”到“子”的文件)? 我所说的是完全独立的程序,不是类或函数之类的东西。
为了高效运行,不必等待数小时才能完成所有操作,我需要“子”程序运行十次,并且更快地完成任务。因此,我运行子程序十次,并为每个程序提供单独的范围进行检查。
两个程序都可以正常运行,但我希望它们可以相互运行/报告,而且希望在数据传输的子母侧尤其不要使用文件“传输”来完成任务。目前,“母”程序如下:
'Child'程序
我正在尝试将原始的VB6程序转换到Linux,并同时让它更易于使用。这就是为什么缺少
是的,我想要同时运行10个程序副本,以节省时间。如果程序能向“主机”返回报告信息,而“主机”可以将当前搜索值打印到屏幕上,那么我可以不需要GUI界面。同时,如果子级可以报告自己何时完成,以及它是否成功下载任何文件(相对于由于文件太小而下载然后被删除),我将使用成功的下载信息来更新Highest.txt,以便下次运行程序时使用。
我认为这可以更好地澄清问题...或者我不理解使用服务器/客户端交互的本质:) 程序中唯一需要
我有一个程序,它使用.txt文件将起始值传递给另一个程序。每次运行它时(基本上同时运行十次),我在启动程序之间更新文件中的值。这样做很好,但我希望在“子”程序完成时,“子”程序向“母”程序报告,并报告它发现要下载的文件。是否可以这样做,而不使用11个文件来实现(这是每个“子”到“母”报告的一个文件,以及一份“母”到“子”的文件)? 我所说的是完全独立的程序,不是类或函数之类的东西。
为了高效运行,不必等待数小时才能完成所有操作,我需要“子”程序运行十次,并且更快地完成任务。因此,我运行子程序十次,并为每个程序提供单独的范围进行检查。
两个程序都可以正常运行,但我希望它们可以相互运行/报告,而且希望在数据传输的子母侧尤其不要使用文件“传输”来完成任务。目前,“母”程序如下:
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 + 1
for proc in procs:
proc.wait()
'Child'程序
import urllib
import os
from Tkinter import *
import time
root = Tk()
root.title("Audiodownloader")
root.geometry("200x200")
app = Frame(root)
app.grid()
os.chdir('/media/')
Fileval = open('NextVal.txt','r')
Fileupdate = Fileval.read()
Fileval.close()
Fileupdate = int(Fileupdate)
Filect = Fileupdate/10000
Filect2 = str(Filect)+"0009"
Filecount = int(Filect2)
while Fileupdate <= Filecount:
root.title(Fileupdate)
url = 'http://www.yourfavoritewebsite.com/audio/encoded/'+str(Fileupdate)+'.mp3'
urllib.urlretrieve(url,str(Fileupdate)+'.mp3')
statinfo = os.stat(str(Fileupdate)+'.mp3')
if statinfo.st_size<10000L:
os.remove(str(Fileupdate)+'.mp3')
time.sleep(.01)
Fileupdate = Fileupdate+1
root.update_idletasks()
我正在尝试将原始的VB6程序转换到Linux,并同时让它更易于使用。这就是为什么缺少
.mainloop
的原因。这是我第一次尝试使用Python,因此缺少def
或类。1.5个月没有接触它主要是因为不知道该怎么做。之前的一些研究表明这远远超出了我的能力范围。我从未涉及过线程/套接字/客户端/服务器交互,所以在这种情况下我很蠢。无论我在Google上搜索什么都会回到stackoverflow。是的,我想要同时运行10个程序副本,以节省时间。如果程序能向“主机”返回报告信息,而“主机”可以将当前搜索值打印到屏幕上,那么我可以不需要GUI界面。同时,如果子级可以报告自己何时完成,以及它是否成功下载任何文件(相对于由于文件太小而下载然后被删除),我将使用成功的下载信息来更新Highest.txt,以便下次运行程序时使用。
我认为这可以更好地澄清问题...或者我不理解使用服务器/客户端交互的本质:) 程序中唯一需要
time.sleep
的原因是为了确保在运行下一个子程序实例之前可以写入文件。我不确定会遇到什么样的时间问题,所以为了安全起见,我包括了这些行。