Popen推出的终端额外线路

时间:2016-10-25 09:36:25

标签: python unix subprocess

我有以下脚本尝试将作业提交到PBS队列。

import sys
import os
import subprocess

inpfile="sim.input"
qscript="run.sh"

#2.1 create a directory to launch the script from
dir="test"
os.system("mkdir {}".format(dir))
os.system("cp {} {} {}".format(qscript,inpfile,dir))


#2.2 launch the simulation
subprocess.Popen(["qsub",qscript],cwd=dir)

该脚本有效,但在我点击Enter后,我在终端中输入一个空行,所以我必须再次点击Enter以恢复我的提示。如果我subprocess.call(),这不会发生。那么,问题是如何摆脱newline?以下是我在终端中看到的内容:

dude@machine$ python submit01.py 
dude@machine$ 3463.machine.com

dude@machine$ 

修改:脚本run.sh

#!/bin/bash
#PBS -S /bin/bash
#PBS -N job
#PBS -l nodes=1:ppn=1
#PBS -j oe
#PBS -V
cd $PBS_O_WORKDIR
pwd

sim.input可以是任何文件。

1 个答案:

答案 0 :(得分:1)

我想我找到了答案here

subprocess.Popen()的空行来自于我没有指定标准输出。如果未指定,则终端中有一个空行,据我所知,这是无害的。所以,代码可以是:

with open("output.txt","w") as out:
    #2.2 launch the simulation
    subprocess.Popen(["qsub",qscript],cwd=dir,stdout=out)

并且不会给出空行。