Python使用os.system - 有没有办法让Python脚本在调用完成前继续执行?

6 投票
3 回答
3835 浏览
提问于 2025-04-16 04:48

我正在尝试使用Python(通过Django框架)来执行一个Linux命令行的操作。我试过使用os.system和os.open这两个方法,但无论哪种方式,Python脚本在执行命令后都会卡住,因为这个命令是用来启动一个服务器的(这个服务器是长期运行的,所以它不会“结束”)。我知道如果用其他Python代码可以使用像celery这样的工具,但我想应该有一种简单的方法可以让它执行命令行操作,而不需要“被绑定”在这个操作上,这样它就可以继续往下走。我在想我是不是做错了什么……谢谢任何建议。

我现在是这样调用的:

os.system("command_to_start_server")

我还试过:

response = os.popen("command_to_start_server")

3 个回答

0

试试这个:

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

你可以使用 django-celery。django-celery 是一个可以让 Django 和 Celery 配合使用的工具。Celery 是一个任务队列/工作队列,主要是通过分布式消息传递来处理任务。

想了解如何使用它,可以查看这个教程:http://ask.github.com/celery/getting-started/first-steps-with-django.html

9

我不太确定,但我觉得subprocess模块里的Popen比os.popen要灵活得多。如果我没记错的话,它支持异步启动进程,我想这正是你需要的功能。

编辑:我已经有一段时间没用subprocess模块了,但如果我没搞错,subprocess.Popen会立即返回,而只有当你尝试与这个进程进行交流(比如读取它的输出)时,使用subprocess.communicate,程序才会等待输出,如果没有输出的话。

撰写回答