python中的子进程不执行命令

2024-05-29 03:02:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码,我正在设计一个文件,对它执行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部分似乎被挂起了


Tags: 文件代码命令行import命令程序脚本true
1条回答
网友
1楼 · 发布于 2024-05-29 03:02:24

Popen()在被调用程序完成执行之前返回。使用call(或check_call,检查返回代码)可能是一个更好的解决方案。更好的是,使用python进行转换和复制。在

我不知道为什么要管道stdout,但我假设您不希望dos2unix或mpirun打印到屏幕上,所以我将它们重定向到/dev/null。在

import subprocess
import shutil
import os

os.chdir('/home/mike/testing/crystal')
subprocess.check_call('dos2unix mgo_input', stdout=open('/dev/null','w'), shell=True)
shutil.copy2(mgo_input, 'INPUT')
subprocess.check_call('mpirun -np 8 Pcrystal', stdout=open('mgo_singlepoint.out', 'w'), stdstderr=subprocess.STDOUT, shell=True)

相关问题 更多 >

    热门问题