【发布时间】:2013-08-21 18:13:41
【问题描述】:
我遇到了一些麻烦。我想在 Python 中的特定目录中运行 shell 命令。根据我在互联网上找到的代码,我需要以下内容:
import os
import subprocess
import shlex
然后代码本身在下面
os.chdir('/etc/test/')
cmd = 'scrapy crawl test'
subprocess.call(shlex.split(cmd))
看起来,我正在尝试在 /etc/test/ 目录中运行命令“scrapy crawl test”。当我用终端手动运行它时,它似乎工作正常,但是当我用这个 python 代码运行它时,它给了我一个错误:
抓取时发生信息异常:[Errno 2] 没有此类文件或 目录
有没有人能告诉我我的代码是否不正确,或者我是否以错误的方式处理这个问题。
【问题讨论】:
-
是否有任何额外的回溯信息,或者只是那一行错误?
-
附带说明,
cmd = ['scrapy', 'crawl', 'test']然后subprocess.call(cmd)更简单,而且可能更难出错;无需在这里使用shlex。但这不会影响您要解决的问题。 -
@abamert 恐怕我找不到任何进一步的追溯信息。在你的情况下,我还需要 os.chdir 命令吗?
-
@Jimmy:
scrapy是一个 Python 库。你读过入门和教程的东西吗?你想在 Python 中做的所有事情,都可以在 Python 中完成。您想在 shell 或 cronjob 中执行的所有操作,都可以使用命令行工具来完成。如果您尝试从 Python 中运行命令行工具,那么您可能在此过程的早期犯了一个错误……但是如果没有更多关于您正在尝试做什么的信息,就很难确定那是什么。 -
@Jimmy:无论如何,您看到的错误来自
scrapy,而不是来自您的代码。这可能意味着您的蜘蛛存在错误,或者您的目录布局不是您所期望的,或者其他一百万件事。您是否尝试过使用scrapy shell进行调试,如教程中所述?
标签: python shell debian subprocess scrapy