在过去的几个月里,我一直在教自己python,最后我开始做一些有用的事情.
我最终要做的是拥有一个充当队列的python脚本.也就是说,我想有一个包含一堆输入文件的文件夹,另一个程序用来运行计算(我是理论物理学家,每天做很多计算工作).
我现在必须这样做的方法是将所有输入文件放在具有计算软件的盒子上.然后我必须将dos输入文件转换为unix(dos2unix),然后我必须将新的输入文件复制到名为'INPUT'的文件中.最后,我运行一个启动作业的命令.
所有这些任务都在命令提示符下处理.我的问题是如何使用命令提示符连接程序?然后,我如何监视进程(我通常通过cpu使用和TOP命令执行),并在上一个作业完成后让python启动下一个作业.
抱歉漫无目的,我只是不知道如何从脚本中控制命令提示符,然后让它自动"监视"该作业.
谢谢
这个问题源于我对 UNIX 命令结构和 SUBPROCESS 模块缺乏了解,所以请提前原谅我的天真。
我有一个命令,看起来像这样
path/to/openmpi/mpirun -machinefile machine.file -np 256 /path/to/excecutable </dev/null &> output.out &
Run Code Online (Sandbox Code Playgroud)
我知道 MPIrun 的结构如何工作,并且我认为我的可执行文件将其数据写入 stdout,然后将其重定向到名为 output.out 的文件。我已经在使用 os.sys() 的 python 脚本中使用了此命令,但我想使用子进程,以便当可执行文件完成运行(在后台)时,python 脚本可以恢复执行“操作”。
我不知道从哪里开始,所以如果有人有任何提示或可以向我展示格式化子进程命令的正确方法,我将非常感激。所有使用子流程的个人尝试都会导致巨大的失败。
谢谢!!!
我有一个递归运行的程序,虽然 95% 的情况下这不是问题,但如果我做的事情花了太长时间,有时我会遇到递归限制。在我努力转换为迭代代码的过程中,我决定尝试以下方法:
while True:
do something
#check if task is done
if done:
print 'ALL DONE'
break
else:
time.sleep(600)
continue
Run Code Online (Sandbox Code Playgroud)
我已经测试了我的代码并且它工作正常,但我想知道这种方法是否存在本质上的错误?如果运行时间太长,它会耗尽内存或使盒子崩溃吗?
提前致谢!
编辑:
我指的“做某事”是定期检查日志文件中的某些关键字,因为数据不断写入日志文件。一旦写入这些行(发生的时间长度不同),我就会让脚本执行某些任务,例如将特定行复制到单独的文件中。
我原来的程序有两个函数,一个函数定期调用自身,直到找到关键字,然后调用“dosomething”函数。完成后的“做某事”函数将调用原始函数,这种情况会一直发生,直到任务完成或达到递归限制
我有一个看起来像的文件
12 MG -5.000000000000E-01 -5.000000000000E-01 0.000000000000E+00
16 S 1.558454815345E-01 1.558454815345E-01 2.500000000000E-01
8 O 2.189546044408E-01 -1.271822846411E-01 4.012978695812E-01
Run Code Online (Sandbox Code Playgroud)
我想从行的前面分出数字,输出为
MG -5.000000000000E-01 -5.000000000000E-01 0.000000000000E+00
S 1.558454815345E-01 1.558454815345E-01 2.500000000000E-01
O 2.189546044408E-01 -1.271822846411E-01 4.012978695812E-01
Run Code Online (Sandbox Code Playgroud)
我有这个
for line in file:
head, sep, tail = line.partition('wildcard')
print tail
Run Code Online (Sandbox Code Playgroud)
我应该为通配符添加什么?
我有一个我编写的程序,它遍历目录中的所有文件,并查找带有标志的文件,然后将它们输入到不同的程序中.它工作得很好,我现在唯一想做的就是将脚本放在一个盒子上的一个位置,然后让它知道查看我当前作为工作目录的目录.目前我所做的就是将脚本放到我正在工作的任何目录中,然后从那里调用它,但这很乏味,需要我不断地编写脚本.
我只是希望有一个更优雅的方式来做到这一点?任何帮助,将不胜感激.