Python代码与在终端中运行时的行为不同
当我通过终端传递mpirun命令时,通常(和预期的)结果是一个包含大量数据的输出文件 但是,当我通过python脚本传递代码时,所有预期的输出文件都会被创建,但是它们不包含任何数据。对此有什么全球性的解释吗?我尝试了许多不同的方法,使用os.system和子流程。我也尝试过在后台运行代码,也尝试过只运行。我也尝试过让程序吐出数据,而不是把数据保存到输出文件中,结果都是一样的 代码如下:Python代码与在终端中运行时的行为不同,python,subprocess,mpi,Python,Subprocess,Mpi,当我通过终端传递mpirun命令时,通常(和预期的)结果是一个包含大量数据的输出文件 但是,当我通过python脚本传递代码时,所有预期的输出文件都会被创建,但是它们不包含任何数据。对此有什么全球性的解释吗?我尝试了许多不同的方法,使用os.system和子流程。我也尝试过在后台运行代码,也尝试过只运行。我也尝试过让程序吐出数据,而不是把数据保存到输出文件中,结果都是一样的 代码如下: os.system("mpirun -np 4 /home/mike/bin/Linux-ifort_XE_o
os.system("mpirun -np 4 /home/mike/bin/Linux-ifort_XE_openmpi-1.6_emt64/v2_0_1/Pcrystal > mgo.out")
获取该行为的最简单方法是如果没有成功运行mpirun 例如,如果从命令行运行
not_actually_a_command > myFile.txt
将创建myFile.txt,但将为空(“未找到命令”消息将打印到stderr,因此“>”不会捕获该消息)
尝试使用完全解析的路径运行MPI
你的方法似乎没有内在的问题。当我这样做的时候
os.system("echo hello, world >hello.txt")
它以“hello,world”结尾,因此如果您获得了运行命令,它应该对您有用。您应该从提供完整的路径开始
os.system("/complete/path/to/mpirun
并打印结果,打印(操作系统…等),
然后把错误贴出来,这样我们就知道哪里出了问题。
使用子流程模块时,可能需要一个“shell=True”我同意您的意见,但是该命令确实有效。如果我将mpirun命令直接复制到终端中,它将完美地工作。我这样做了,它返回0,表示一切都应该正常工作。