Python,使用os.system - Python脚本是否有办法在不等待调用完成的情况下移过它?

时间:2010-09-30 11:18:11

标签: python django command-line os.system

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

我正在打这样的电话

os.system("command_to_start_server")

也尝试过:

response = os.popen("command_to_start_server")

3 个答案:

答案 0 :(得分:9)

我不确定,但我认为the subprocess module和它的Popen比os.popen灵活得多。如果我没记错的话,它包括异步过程产生,我认为这就是你要找的东西。

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

尝试:

os.system("command_to_start_server &>/dev/null &")