【发布时间】:2016-08-08 16:28:14
【问题描述】:
我正在使用subprocess 模块执行两个命令:
import shlex
from subprocess import check_call()
def comm_1(error_file):
comm = shlex("mkdir /tmp/kde")
try:
check_call(comm)
except subprocess.CalledProcessError:
error_file.write("Error comm_1")
def comm_2(error_file):
comm = shlex("ls -la /tmp/kde")
try:
check_call(comm)
except subprocess.CalledProcessError:
error_file.write("Error comm_2")
if __name__ == "__main__":
with open("error_file", "r+") as log_error_file:
comm_1(log_error_file)
comm_2(log_error_file)
log_error_file.write("Success")
我知道此设计中存在一些缺陷,例如 error_file 与函数共享。不过,这很容易重构。我想要做的是将整个过程分离到后台。我会用
check_call(comm, creationflags=subprocess.CREATE_NEW_CONSOLE)
但这会造成比赛问题,因为我想确保comm_1 在comm_2 开始之前完成。使用subprocess 执行此操作的最佳方法是什么?我不能使用python-daemon 或标准 Python 2.6 库之外的其他包。
编辑:我可以尝试使用类似的东西
nohup python myscript.py &
但想法是只有一种方法可以从 python 脚本开始工作。
【问题讨论】:
-
似乎你可以改变一些事情,以便
if __name__ == "__main__"myscript.py 产生了一些你目前正在做的事情 e 最后。使用正确的条件,这可能是本身。 -
对不起,我不听。我应该删除这些功能吗?
标签: python linux subprocess