Я изучаю использование витой (последняя версия 12.3.0), как способ сделать небольшую обработку на стороне сервера для мобильного приложения.twisted Using Processes
Мое первое совпадение состоит в том, чтобы запустить команду «хвост» в файле журналов и доставить постобрабованные найденные строки в мобильное приложение. Это должно быть легко ...
Сейчас в документации на сайте TwistedMatrix есть «с использованием процессов» страница, где я получил следующий код:
from twisted.internet import protocol, utils, reactor
from twisted.python import failure
from cStringIO import StringIO
class CommandRunner(protocol.Protocol):
#command = "ls /"
command = "tail -n 100 /var/log/system.log"
def connectionMade(self):
output = utils.getProcessOutput(self.command)
output.addCallbacks(self.writeResponse, self.noResponse)
def writeResponse(self, resp):
self.transport.write(resp)
self.transport.loseConnection()
def noResponse(self, err):
print err
self.transport.write("Houston, we have an error!\n")
self.transport.loseConnection()
if __name__ == '__main__':
f = protocol.Factory()
f.protocol = CommandRunner
reactor.listenTCP(10999, f)
reactor.run()
Это 99,9% идентично к опубликованному фрагменту кода в разделе «Doing it the Easy Way». Единственное изменение - команда оболочки, которую должен выполнить скрученный (на моем Mac у меня нет команды фортуны).
После запуска образца кода, когда я пытаюсь подключиться на 10999 порт из второго терминала с телнет я получаю эту ошибку:
[Failure instance: Traceback (failure with no frames): : got stderr: 'Upon execvpe tail -n 100 /var/log/system.log [\'tail -n 100 /var/log/system.log\'] in environment id 4315532016\n:Traceback (most recent call last):\n File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Twisted-12.3.0-py2.7-macosx-10.6-intel.egg/twisted/internet/process.py", line 420, in _fork\n executable, args, environment)\n File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Twisted-12.3.0-py2.7-macosx-10.6-intel.egg/twisted/internet/process.py", line 466, in _execChild\n os.execvpe(executable, args, environment)\n File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py", line 353, in execvpe\n _execvpe(file, args, env)\n File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py", line 368, in _execvpe\n func(file, *argrest)\nOSError: [Errno 2] No such file or directory\n']
Я не вижу каких-либо очевидных причин, почему код должен подать с [Errno 2] нет такого файла или каталога \ п '] ошибка ..
Тиа
Jean Paul, спасибо !! На Mac (или в другом месте) явно нет «tail -n 100 /var/log/system.log» ... Исправление проблемы с вызовом getProcessOutput устраняет проблему! Спасибо, Aldo – aaberga