保持进程的开放性并用Python与它通信

2024-10-05 10:04:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python脚本进行一些迭代。我所做的就是这样。在

Python执行副总裁变量.in.1输出输出.1

这里1是迭代次数。在

现在,它使用变量文件中的值调用可执行文件,然后将可执行文件的输出放入输出文件中。不幸的是,我看到的是,反复调用可执行文件需要更多的时间。在

相反,我想做的是启动可执行文件一次,然后使用相同的语法(即python)将变量发送到可执行文件执行副总裁变量.in.1输出输出.1。在

我需要保留这个语法是因为变量文件是在外部生成的。我无法控制它,但一旦它被生成,我需要使用可执行文件来创建输出文件,然后需要以所需的格式进行解析。在

编辑:我将尝试用一种简化的方式来表示我正在做的事情,因为这是一个很大的代码。在

import sys
import os
import parseinput
import parseoutput

s1=sys.argv[1];s2=sys.argv[2]

op=open(s1,'r');inp=op.readlines();op.close()
variableswrite=parseinput.parseinput(inp)
op=open('pass.dat','w');op.write(variableswrite);op.close()

os.sytem('execute < pass.dat')

op=open('executeout.dat','r');out=op.readlines();op.close()
outwrite=parseoutput.parseoutput(out)
op=open(s2,'w');op.write(outwrite);op.close()

这是一个非常粗糙的方式来显示我在做什么。如果这是密码执行副总裁,每次我用python运行它执行副总裁变量.in.1结果。输出.1,我将使用可执行文件获取一个输出文件,该文件将被解析以获得输出文件。在

相反,如果我可以保持“execute”可执行文件的打开状态,并且仍然使用python执行副总裁变量.in.1结果。输出.1如果脚本将解析输入文件,然后将其发送到打开的可执行文件,然后由该可执行文件创建输出,则我的工作将更快、更高效。在


Tags: 文件import脚本可执行文件closeossys方式
3条回答

有没有一种方法可以扩充exec.py以获得任意数量的输入/输出文件名对?在

如果是,则调用将如下所示:

python exec.py variables.in.1 output.out.1 ... variables.in.N output.out.N

现在,假设你有1000对这样的对。您可以将这个范围划分为20组,每组50对(例如)。并使用不同的组调用脚本20次(并发):

^{pr2}$

这里需要的是“subprocess”模块,它使启动进程和连接其输入和输出管道变得简单

为了避免阻塞,只需在不同的进程中进行输入和输出。你可以用“os.fork操作系统“:

import os
import subprocess
execute = subprocess.Popen(
    'execute',
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE
)
if os.fork():
    #feed data into the input
    while True:
        input = ...
        execute.stdin.write(input)
else:
    outGenerator=Out
    #do something with the output
    for outline in execute.stdout:
        print outline

或者您可以将输入和输出代码拆分为两个文件,然后使用类似于“main”:

^{pr2}$

这只是一个很长的说法

{pr/>3}$

你想要的是

1)创建一个一直在运行的守护进程

2)给出监控文件或文件夹列表作为参数

3)使用inotify检测新的传入文件

http://pyinotify.sourceforge.net/

4)每次inotify发出信号时,通过调用该方法来触发守护进程内部的转换

如果语法有“python”命令,就不能保持语法不变,因为这自然会每次重新启动解释器。在

相关问题 更多 >

    热门问题