2010-03-25 3 views
4

У меня есть функция python, которая вызывает вызов подпроцесса в сценарий оболочки, который выводит «true» или «false». Я сохраняю вывод от subprocess.communicate() и пытаюсь сделать return output == 'true', но он возвращает False каждый раз. Я не слишком хорошо знакомы с питоном, но читать о сравнении строк говорит, что вы можете сравнивать строки, используя == = и т.д.Сравнение строк на Python

Вот код:

def verifydeployment(application): 
    from subprocess import Popen, PIPE 
    import socket, time 

    # Loop until jboss is up. After 90 seconds the script stops looping; this 
    # causes twiddle to be unsuccessful and deployment is considered 'failed'. 
    begin = time.time() 
    while True: 
     try: 
      socket.create_connection(('localhost', 8080)) 
      break 
     except socket.error, msg: 
      if (time.time() - begin) > 90: 
       break 
      else: 
       continue 

    time.sleep(15) # sleep for 15 seconds to allow JMX to initialize 

    twiddle = os.path.join(JBOSS_DIR, 'bin', 'twiddle.sh') 
    url = 'file:' + os.path.join(JBOSS_DIR, 'server', 'default', 'deploy', os.path.basename(application)) 

    p = Popen([twiddle, 'invoke', 'jboss.system:service=MainDeployer', 'isDeployed', url], stdout=PIPE) 
    isdeployed = p.communicate()[0] 

    print type(isdeployed) 
    print type('true') 
    print isdeployed 
    return isdeployed == 'true' 

Выход:

<type 'str'> # type(isdeployed) 
<type 'str'> # type('true') 
true   # isdeployed 

но False всегда возвращается. Я также пробовал return str(isdeployed) == 'true'.

+0

Вы уверены, что нет никакой новой строки после того, как «истина»? Возможно, попробуйте isdeployed.strip() == 'true' –

ответ

8

Вы уверены, что символ окончания строки не существует, в результате чего ваша строка содержит "true\n"? Это кажется вероятным.

Вы можете попробовать: isdeployed.startswith("true"), или некоторые зачистки.

+0

О, есть. Это было просто, и я некоторое время подслушивал меня. Благодаря! – ravun

6

Вы пробовали позвонить

isdeployed.strip() 

перед Comparision

+0

Я не заметил новую строку. Я буду использовать функцию strip(). благодаря! – ravun