процесс, запущенный методом pexpect.run (), внезапно завершается - PullRequest
0 голосов
/ 05 февраля 2019

Когда я запускаю код ниже, я вижу, что процесс завершается даже до завершения.Я проверил команду, запустив ее вручную, команда просто работает файл.cmssso-util производит вывод, который составляет около 1200 строк. Может ли это быть проблемой с буфером.Я проверил скрипт, назначив 'ls -ltr' переменной команде, работает отлично.Ссылка на документацию по ссылке ниже: https://pexpect.readthedocs.io/en/stable/_modules/pexpect/run.html

  • Я попытался добавить команду с префиксом 'bash -c', которая не устранила эту проблему.
  • Я попытался выяснить, как pexpect определяетпрекратить процесс, все еще не мог получить четкую документацию.Пожалуйста, помогите мне.
import pexpect
command = "cmsso-util domain-repoint -m execute  --src-emb-admin " + 'sourceVcAdmin' + " --replication-partner-fqdn " + 'destVc' + " --replication-partner-admin " + 'destVcAdmin' + " --dest-domain-name " +    'destDomain'

print("Running command  : " + command) 

(command_output, exitstatus) =   pexpect.run(command ,withexitstatus=1, events={'Enter Source embedded vCenter Server Admin Password :' : '\r\n','Enter Replication partner Platform Services Controller Admin Password :' : '\r\n','All Repoint configuration settings are correct; proceed?(.*)' :  'Y\r\n'})

print("----Command output------------")
print(command_output)
print("-----------------------------")

assert exitstatus is 0 , "Execution Failed"
print("Successfully Completed Embedded Cross Domain Re-pointing ")

1 Ответ

0 голосов
/ 09 февраля 2019

Я мог бы решить эту проблему, используя следующий код:

    import pexpect
try :
        command = "cmsso-util domain-repoint -m execute  --src-emb-admin " + 'sourceVcAdmin' + " --replication-partner-fqdn " + 'destVc' + " --replication-partner-admin " + 'destVcAdmin' + " --dest-domain-name " +    'destDomain'
        print("Running command  : " + command) 
        child = pexpect.spawn(command, timeout=3000,maxread=12000)
        child.expect (['Enter Source embedded vCenter Server Admin Password :'],timeout=40000)
        child.sendline(<password>)
        child.expect (['Enter Replication partner Platform Services Controller Admin Password :'],timeout=40000)
        child.sendline(<password>)
        child.expect (['All Repoint configuration settings are correct; proceed?(.*)'],timeout=40000)
        child.sendline('Y')
        child.expect(pexpect.EOF)
        print(child.before)   
        assert(child.status == 0 , "Operation Failed!", "Successfully Completed Embedded Cross Domain Re-pointing")
except:
    print("Exception was thrown")
    print("debug information:")
    print(str(child))
    child.close()
    exit(1)

Это делается путем увеличения значения по умолчанию child = pexpect.spawn (command, timeout = 600, maxread = 8000) и maxread параметры

...