1

执行以下脚本时(简化示例):

#!/usr/bin/env python
import pexpect
spawn = pexpect.spawn('/bin/bash')
with open('/tmp/logfile.log', 'w') as f:
    spawn.logfile_read = f
    spawn.sendline('echo "Hello I am a really long command, in fact I am 100 characters long! Potato Potato Potato....."')
    spawn.sendline('exit')
    spawn.expect(pexpect.EOF)

我在换行时遇到问题,导致^M日志中出现字符。pexpect 日志文件现在看起来像这样:

bash-3.2$ echo "Hello I am a really long command, in fact I am 100 characters lo ^Mng! Potato Potato Potato....."
Hello I am a really long command, in fact I am 100 characters long! Potato Potato Potato.....
bash-3.2$ exit
exit

在 80 个字符之后,该行被回车换行,我不希望这样。我尝试了很多不同的方法来禁用换行(使用,预先tput rmam调用,使用,设置,将各种参数传递给 /bin/bash..),但我似乎找不到正确的技巧。stty columns 1000spawn.setwinsize(1000, 1000)os.environ['COLUMNS'] = "1000"

在这种情况下如何禁用换行?

4

2 回答 2

5

我终于想通了。echo当我记得该命令是 bash 内部的时,为我指明了正确的方向。将命令更改为 /bin/echo 完全改变了行为。这只是解决方案的一部分。

看到 bash 本身似乎是问题,我查看了手册页以查看可能的原因。然后它击中了我!Bash 使用 readline 支持,并且不管使用 /bin/echo 或内部 echo 命令,禁用它确实可以解决您的问题。

只需将您的生成线更改为spawn = pexpect.spawn('/bin/bash --noediting').

于 2013-05-17T06:21:29.820 回答
-1

我遇到了同样的问题。使用setwinsize(1000,1000)对我有用。

child = pexpect.spawn('ssh %s@%s' % (user, host))
child.setwinsize(1000,1000)
于 2017-03-01T15:34:35.633 回答