ошибка при запуске call() в подпроцессе Python

я пытаюсь запустить:

 try:
    with open(subprocess.PIPE, 'w') as pipe:
          call(["/usr/sbin/atms","-k"], stdout=pipe, stderr=pipe)                                        
          call(["/usr/sbin/atms","/usr/sbin/atms.conf"],stdout=pipe,stder=pipe)
 except Exception, e:
          print e

теперь я получаю

 coercing to Unicode: need string or buffer, int found

Что это значит?

Спасибо


person Alon_T    schedule 06.01.2013    source источник
comment
Нет необходимости использовать os.devnull для перенаправления stdout или err. Просто используйте subprocess.PIPE и игнорируйте вывод.   -  person Martijn Pieters    schedule 06.01.2013
comment
Хорошо.. попробую.. это значит заменить строку в коде на subprocess.PIPE вместо os.devnull?   -  person Alon_T    schedule 06.01.2013
comment
В яблочко; нет необходимости перенаправлять на /dev/null, если вы можете просто передать и игнорировать. Я не утверждаю, что это решит вашу проблему, просто использование /dev/null является решением оболочки, и это Python.   -  person Martijn Pieters    schedule 06.01.2013
comment
@MartijnPieters Я попробовал и добавил результат выше .. :-(   -  person Alon_T    schedule 06.01.2013
comment
Вам не нужно открывать PIPE как файл. Используйте stdout=subprocess.PIPE, см. документацию. :-)   -  person Martijn Pieters    schedule 06.01.2013
comment
изменил его на call([/usr/sbin/atms,-k], stdout=subprocess.PIPE, stderr=subprocess.PIPE), и теперь я получил ту же ошибку с самого начала, что объект «Popen» не имеет атрибута « child_created» в связанном методе Popen.__del_ объекта ‹subprocess.Popen по адресу 0xd81790›› игнорируется __init__(), получен неожиданный аргумент ключевого слова «stder»   -  person Alon_T    schedule 06.01.2013


Ответы (1)


open() используется для файлов и ожидает имя файла, а не канал.

Вместо .call() можно использовать Popen:

>>> p = subprocess.Popen(['python', '-c', 'print "test"'], stdout=subprocess.PIPE)
>>> p.stdout.read()
'test\r\n'
person Alex L    schedule 07.01.2013