将值从一个Python程序传递到另一个Python程序

con*_*sed 3 python ipc

是否有可能 - 除了使用.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 + 1

for proc in procs:
    proc.wait()
Run Code Online (Sandbox Code Playgroud)

'儿童'计划

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()
Run Code Online (Sandbox Code Playgroud)

我正在尝试将原来的VB6程序转换为Linux,并使其更容易同时使用.因此缺乏.mainloop缺失.这是我对Python中任何事物的第一次真正尝试,因此缺乏def或类.我试图回来并在1.5个月无所事事之后完成这项任务主要是由于不知道该怎么做.在不久前的研究中,我发现这是我的想法.我从未对线程/套接字/客户端/服务器交互做过任何事情,所以在这种情况下我纯粹是个白痴.谷歌上的任何东西,我只是被带回到stackoverflow.

是的,我希望同时运行10个程序的副本,以节省时间.如果程序可以向"母亲"报告,那么母亲可以在屏幕上打印正在搜索的当前值,我可以不使用gui界面.以及如果孩子可以在完成时报告回来,以及它是否有任何成功下载的文件(相对于下载然后因为小而被删除).我会使用成功的下载信息来更新Highest.txt,以便下次运行程序.

我认为这可能会澄清事情好多了......或者我不明白使用服务器/客户端交互的本质:)唯一的原因time.sleep是在程序中试图确保文件可以在下一个之前写入子程序的实例运行了.我不确定我可能会遇到什么样的时间问题所以我将这些线路包含在内以确保安全.

Ste*_*ehl 5

这可以使用多处理库使用简单的客户端/服务器拓扑来实现.使用您的母/子术语:

server.py

from multiprocessing.connection import Listener

# client
def child(conn):
    while True:
        msg = conn.recv()
        # this just echos the value back, replace with your custom logic
        conn.send(msg)

# server
def mother(address):
    serv = Listener(address)
    while True:
        client = serv.accept()
        child(client)

mother(('', 5000))
Run Code Online (Sandbox Code Playgroud)

client.py

from multiprocessing.connection import Client

c = Client(('localhost', 5000))

c.send('hello')
print('Got:', c.recv())

c.send({'a': 123})
print('Got:', c.recv())
Run Code Online (Sandbox Code Playgroud)

运行

$ python server.py
$ python client.py
Run Code Online (Sandbox Code Playgroud)

  • 因此,假设语言不同,一个人是否可以在除本地tcp端口之外的单独任务之间使用这种“所谓的多处理”互通行为?因为这是我一直使用的时间(用于非tcp连接),所以在这种情况下,上述协议的技术名称是什么? (2认同)

小智 1

当你谈到使用txt在程序之间传递信息时,我们首先需要知道你使用的是什么语言。根据我对 Java 和 Python 的了解,尽管需要工作的信息量很大,但仍可行。

在python中,可以使用自带的库来读写txt和调度执行,可以使用apscheduler。

  • 问题标题为“Python”。 (4认同)