6

我正在尝试使用 Python(通过 Django 框架)进行 Linux 命令行调用,并尝试了 os.system 和 os.open 但对于这两种方法,似乎 Python 脚本在将命令行调用作为调用后挂起用于实例化服务器(因此它永远不会“完成”,因为它意味着长时间运行)。我知道用其他 Python 代码做这样的事情,你可以使用像 celery 这样的东西,但我认为有一种简单的方法可以让它只进行命令行调用而不是“绑定到它”,这样它就可以移动过去,我想知道我是否做错了什么......感谢您的任何建议。

我目前正在拨打这样的电话

os.system("command_to_start_server")

也试过:

response = os.popen("command_to_start_server")
4

3 回答 3

9

我不确定,但我认为带有 Popen的子进程模块比 os.popen 灵活得多。如果我没记错的话,它包括异步进程生成,我认为这就是您正在寻找的。

编辑:自从我使用 subprocess 模块已经有一段时间了,但是如果我没记错的话, subprocess.Popen 会立即返回,并且只有当您尝试使用 subprocess.communicate 与进程通信(例如读取其输出)时,您的如果没有,程序块等待输出。

于 2010-09-30T11:25:16.340 回答
2

您可以使用django-celery。django-celery 为 Django 提供了 Celery 集成。Celery 是一个基于分布式消息传递的任务队列/作业队列。

有关如何使用它的教程,请参阅此http://ask.github.com/celery/getting-started/first-steps-with-django.html 。

于 2010-09-30T12:26:48.653 回答
0

尝试:

os.system("command_to_start_server &>/dev/null &")
于 2010-09-30T11:19:28.023 回答