我有一段代码,我正在设计一个文件,对它执行dos2unix命令,然后将该文件复制到一个名为INPUT的文件中,然后运行一个引导程序的命令。从我的代码来看,前两个任务可以完美地工作,但是脚本似乎没有超过启动程序的命令行。然而,当我完全按照我在脚本中编写的命令行,并在终端中传递它时,它工作得很好。在
代码如下:
import subprocess
import os
os.chdir('/home/mike/testing/crystal')
subprocess.Popen(['dos2unix mgo_input'], stdout=subprocess.PIPE, shell=True)
subprocess.call(['cp mgo_input INPUT'], shell=True)
subprocess.Popen(['mpirun -np 8 Pcrystal </dev/null &> mgo_singlepoint.out &'], stdout=subprocess.PIPE, shell=True)
代码的mpirun部分似乎被挂起了
Popen()在被调用程序完成执行之前返回。使用call(或check_call,检查返回代码)可能是一个更好的解决方案。更好的是,使用python进行转换和复制。在
我不知道为什么要管道stdout,但我假设您不希望dos2unix或mpirun打印到屏幕上,所以我将它们重定向到/dev/null。在
相关问题 更多 >
编程相关推荐