如何使用subprocess.call在Linux中重新启动服务?

时间:2019-01-09 04:12:12

标签: python linux nginx subprocess

我对python和linux不太满意。我想使用subprocess.call重新启动Nginx。我正在使用

subprocess.call("sudo systemctl restart nginx",shell=True)

但是,当使用shell=True时,该命令什么也不做,而我使用的shell=False则表示没有目录或文件,“命令我在一个按钮中实现了subprocess.call。” >

1 个答案:

答案 0 :(得分:0)

在类似Unix的系统上,shell=Trueshell=False之间的区别在于,shell负责破坏exec的命令行,而如果您没有shell, ,您必须自己做。

这里的外壳没有任何好处,因此您可以放心地丢弃它。

subprocess.call(["sudo", "systemctl", "restart", "nginx"])

所以在一般情况下,任何看起来像

subprocess.something("blah 'blah' \"blah\"", shell=True)

需要转换成列表,而无需使用外壳引号来运行它,而无需使用shell=True

subprocess.something(['blah', 'blah', "blah"])

当然还有特定于外壳的所有内容(重定向,管道,globbing等)都需要用本机Python代码替换。

Actual meaning of 'shell=True' in subprocessRunning Bash commands in Python处的更多详细信息

如果您的原始代码无效,那么这也可能无效。