我正在使用python脚本进行一些迭代。我做的是这样的事情。
python exec.py variables.in.1 output.out.1
这里1是迭代次数。
现在它的作用是,它使用变量文件中的值调用可执行文件,然后将可执行文件的输出放入输出文件中。不幸的是,我看到通过一次又一次地调用可执行文件需要更多时间。
我要做的就是启动可执行文件一次,然后使用相同的语法将变量发送到可执行文件,即python exec.py variables.in.1 output.out.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()
这是展示我在做什么的一种非常粗糙的方式。如果这是代码exec.py,每次我使用python exec.py variables.in.1 results.out.1运行它时,我将使用可执行文件获取输出文件,该文件将被解析以获取输出文件。
相反,如果我可以保持'execute'可执行文件打开,仍然执行python exec.py variables.in.1 results.out.1,其中脚本将解析输入文件,然后将其发送到打开的可执行文件,然后会创建输出,我的工作将更加快速和有效。
答案 0 :(得分:0)
有没有办法可以增加exec.py
以获取任意数量的输入/输出文件名对?
如果是这样,调用将如下所示:
python exec.py variables.in.1 output.out.1 ... variables.in.N output.out.N
现在,假设你有1000对这样的对。您可以将此范围划分为20组,每组50对(例如)。并使用不同的组调用脚本20次(同时):
python exec.py variables.in.1 output.out.1 ... variables.in.50 output.out.50 python exec.py variables.in.51 output.out.51 ... variables.in.100 output.out.100 ... python exec.py variables.in.951 output.out.951 ... variables.in.1000 output.out.1000
答案 1 :(得分:0)
你想要的是
1)创建一直运行的守护程序进程
2)将受监控文件或文件夹列表作为参数
3)使用inotify检测新的传入文件
http://pyinotify.sourceforge.net/
4)每次inotify发出一个信号,通过调用方法触发守护进程内的转换
如果语法具有“python”命令,则无法保持语法相同,因为这样每次都会重新启动解释器。
答案 2 :(得分:0)
您需要的是“子流程”模块,它可以简化启动流程并连接其输入和输出管道
为避免阻塞,只需在单独的进程中执行输入和输出。你可以用“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
或者您可以将输入和输出代码分成两个文件,然后使用类似“主”的内容:
import os
import subprocess
generateInput = subprocess.Popen(
['python','generateInput.py'],
stdout=subprocess.PIPE
)
execute = subprocess.Popen(
'execute',
stdin=generateInput.stdout,
stdout=subprocess.PIPE
)
generateOutput = subprocess.Popen(
['python','generateOutput.py'],
stdin=execute.stdout
)
execute.communicate()
这只是很长的说法
python generateInput.py | execute | python gnerateOutput.py