Python代码与在终端中运行时的行为不同

Python代码与在终端中运行时的行为不同,python,subprocess,mpi,Python,Subprocess,Mpi,当我通过终端传递mpirun命令时,通常(和预期的)结果是一个包含大量数据的输出文件 但是,当我通过python脚本传递代码时,所有预期的输出文件都会被创建,但是它们不包含任何数据。对此有什么全球性的解释吗?我尝试了许多不同的方法,使用os.system和子流程。我也尝试过在后台运行代码,也尝试过只运行。我也尝试过让程序吐出数据,而不是把数据保存到输出文件中,结果都是一样的 代码如下: os.system("mpirun -np 4 /home/mike/bin/Linux-ifort_XE_o

当我通过终端传递mpirun命令时,通常(和预期的)结果是一个包含大量数据的输出文件

但是,当我通过python脚本传递代码时,所有预期的输出文件都会被创建,但是它们不包含任何数据。对此有什么全球性的解释吗?我尝试了许多不同的方法,使用os.system和子流程。我也尝试过在后台运行代码,也尝试过只运行。我也尝试过让程序吐出数据,而不是把数据保存到输出文件中,结果都是一样的

代码如下:

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,表示一切都应该正常工作。