所以我正在尝试使用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
答案 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中获得的内容并相应地编辑脚本。