在python脚本中运行scrapy spider时,scrapy.cmdline.execute和执行shell命令有什么区别?

8e2ybdfx  于 2023-04-10  发布在  Python
关注(0)|答案(1)|浏览(109)

当我想运行scrapy spider时,我可以通过调用scrapy.cmdline.execute(['scrapy', 'crawl', 'myspider'])os.system('scrapy crawl myspider')subprocess.run(['scrapy', 'crawl', 'myspider'])来完成。
我的问题是:为什么我更喜欢使用scrapy.cmdline.execute而不是subprocess.run或os.system?
我在scrappy的文档中没有找到关于这个函数的任何文字,它也没有文档字符串,但是我看到它在一些教程和代码示例中被积极地使用。

unftdfkk

unftdfkk1#

使用os.systemsubprocess.run都在子进程中运行命令,其中与scrapy.cmdline.execute一样,您直接调用scrapy入口点函数,然后所有代码都在调用该函数的脚本的同一进程中执行。

  • 为什么你会选择其中一个?

Python官方建议使用subprocess模块而不是调用os.system作为一般规则(有关更多信息,请参阅os.system的文档),并且subprocess API更易于使用并提供更多控制,因此不应真正考虑os.system选项。
对于另外两种方法,虽然我相信有很多理由选择其中一种,但我不建议使用这两种方法。Scrapy提供了大量工具,可以帮助从脚本(如CrawlerProcessCrawlerRunner)执行蜘蛛,这应该使从子进程访问CLI变得不必要。或者直接从脚本中调用CLI入口点函数。(尽管我确信有很多例外)
相反,我建议使用CLI工具作为CLI工具,并在需要通过python代码控制scrapy时使用CrawlerProcess或类似工具。
请参阅从脚本运行scrapy以了解有关如何从python代码运行scrapy的更多信息。

相关问题