我正在尝试编写一个自动安装程序,这需要在我复制一些文件并更改为可执行文件之后,我从'/etc/init.d/'启动一个文件。 我希望即使在退出脚本本身后,该过程仍继续运行。
使用perl,我在一个较旧的脚本中做了类似的事情:
`/etc/init.d/sradmin start > /dev/null 2>&1`;
这很好用,但我已经转移到Python并且看到了很多关于子进程的内容,所以我尝试过:
p = subprocess.Popen(['/usr/bin/bash', '/etc/init.d/sradmin', 'start'])
并在我的'ps -ef'输出中得到这个:
root 29119 29115 0 20:22 pts/0 00:00:00 [bash] <defunct>
在我的脚本中,它确实显示了“启动XXX”,因此它似乎启动了这个但是失败了。
我也尝试过使用
p = subprocess.Popen(['/etc/init.d/sradmin', 'start'])
和
p = subprocess.Popen('/etc/init.d/sradmin start', shell=True)
和
p = subprocess.Popen(['/etc/init.d/sradmin', 'start'], close_fds=True)
我也尝试过stdin,out和error选项。 我也尝试了os.system路线,但是没有用(我知道不推荐,但我认为它可能有用,至少知道别的东西是错的!)。
我正在使用CentOS 7(3.10.0-514.6.1.el7.x86_64 x86_64 GNU / Linux)并使用Python 3.5.2以root身份运行脚本(默认情况下,2016年6月27日,14:02:55)
在此功能出现之前,我是否需要依赖它?似乎很多人的建议对我来说似乎不起作用。
这个让我难过。我只用Python编写了一个多月,通常可以很快找到答案(通过stackoverflow或python docs)。我做了比这更高级的东西,但是,我仍然是Python的新手,所以经验对我不利!
非常感谢,
谢