Python 使用Twisted服务器部署Scrapy Spider

Python 使用Twisted服务器部署Scrapy Spider,python,bash,scrapy,twisted,scrapyd,Python,Bash,Scrapy,Twisted,Scrapyd,我有+20个碎片爬虫,我想从浏览器网页手动部署。 为了实现这一点,我创建了一个简单的twisted服务器,它在shell进程中执行以下命令: scrapyd-deploy default -p $project curl http://127.0.0.1:6800/schedule.json -d project=$project -d spider=$spider 这些命令在twisted中使用utils.getProcessOutput(scriptname)执行。前面的两个命令位于作为参

我有
+20个碎片爬虫
,我想从浏览器
网页
手动部署
。
为了实现这一点,我创建了一个简单的
twisted服务器
,它在shell进程中执行以下命令:

scrapyd-deploy default -p $project
curl http://127.0.0.1:6800/schedule.json -d project=$project -d spider=$spider
这些命令在
twisted
中使用
utils.getProcessOutput(scriptname)
执行。前面的两个命令位于作为参数给定的
脚本中

尝试使用
twistd-y
执行twisted服务器时,会出现以下错误:
[失败实例:回溯(没有帧的失败)::Get stderr:'打包版本1399464111\n'
]

以下是
twisted
服务器的代码:

#/usr/bin/python
from twisted.internet import utils, reactor
from twisted.web import server, resource
from twisted.application import internet, service

class CrawlerResource(resource.Resource):
    isLeaf = True
    script = "./script2.sh"

    def render_GET(self, request):
        request.write("<pre>\n")
        deferred = utils.getProcessOutput(self.script)
        deferred.addCallback(lambda s: (request.write(s+"success!\n"), request.finish()))
        deferred.addErrback(lambda s: (request.write(str(s)), request.finish()))

        return server.NOT_DONE_YET



# factory: create a protocol for each connection
resource = CrawlerResource()
factory = server.Site(resource)

# application & service: run server in the background as a service
application = service.Application("Crawlers deployer")
service = internet.TCPServer(8000, factory)
service.setServiceParent(application)
#/usr/bin/python
从twisted.internet导入utils,reactor
从twisted.web导入服务器,资源
从twisted.application导入internet、服务
类爬虫资源(resource.resource):
isLeaf=True
script=“./script2.sh”
def render_GET(自我,请求):
请求。写入(“\n”)
延迟=utils.getProcessOutput(self.script)
deferred.addCallback(lambda s:(request.write(s+“success!\n”)、request.finish())
deferred.adderback(lambda s:(request.write(str(s)),request.finish())
返回服务器。尚未完成
#工厂:为每个连接创建协议
resource=CrawlerResource()
工厂=服务器。站点(资源)
#应用程序和服务:在后台作为服务运行服务器
application=service.application(“爬虫部署器”)
服务=internet.TCPServer(8000,工厂)
service.setServiceParent(应用程序)

是什么导致了这个错误(不是很详细)

子进程的标准错误流上的字节导致了这种情况
getProcessOutput
将任何标准错误输出视为错误,并使延迟的
失败

您可以通过将
errortoo=True
传递到
getProcessOutput
来修复此问题。这使得它在结果中将stdout和stderr混合在一起,而不是将stderr上的数据视为错误

您可以在中阅读有关此行为的信息