Pexpect不运行命令,只在屏幕上打印它

时间:2017-05-31 18:35:46

标签: python python-3.x pexpect qsub

所以我正在尝试使用pexpect来运行qsub,但是我正在运行像'ls'这样的简单命令来查看它是否先运行。这里的问题是pexpect在终端上打印命令但实际上没有运行它。任何人都可以看看它并告诉我,我是否误解了Pexpect的工作原理?

这是pexpect模块:

from __future__ import absolute_import
from __future__ import print_function
from __future__ import unicode_literals
import sys
import pexpect
fout = open('pythontest', 'w')
process = pexpect.spawnu('qsub -I -l nodes=1:ppn=2', logfile=fout, 
echo=True)
process.expect('ready')
process.sendline('pwd')
process.expect('')
process.sendline('exit')
process.close()

输出文件:

qsub: waiting for job 23315.as0.al-salam.loc to start`
qsub: job 23315.as0.al-salam.loc ready`

pwd
exit

1 个答案:

答案 0 :(得分:0)

我无法完全重现这一点,因为我的机器上没有qsub,但是使用ssh登录到另一台机器,我的代码行为与此相同。如果我按以下方式更改代码,则pwd的结果可以按预期在日志文件中找到:

from __future__ import absolute_import
from __future__ import print_function
from __future__ import unicode_literals
import sys
import pexpect
fout = open('pythontest', 'w')
##process = pexpect.spawnu('qsub -I -l nodes=1:ppn=2', logfile=fout, echo=True)
process = pexpect.spawnu('ssh user@server', logfile=fout, echo=True)
#process.expect('ready')
process.expect('>')
process.sendline('pwd')
#process.expect('')
process.expect('>')
process.sendline('exit')
process.close()

>是我的bash提示符的最后一个字符。

修改

在我们的超级计算机上交互式地使用qsub(我们不幸的是只有python 2.6),我也得到了一个bash提示符(对我来说是>)。因此,可以在没有qsub的情况下以交互方式运行pexpect一次,以查看您从shell中获得的内容并相应地编辑脚本。