我对python和linux不太满意。我想使用subprocess.call重新启动Nginx。我正在使用
subprocess.call("sudo systemctl restart nginx",shell=True)
但是,当使用shell=True
时,该命令什么也不做,而我使用的shell=False
则表示没有目录或文件,“命令我在一个按钮中实现了subprocess.call。” >
答案 0 :(得分:0)
在类似Unix的系统上,shell=True
和shell=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 subprocess和Running Bash commands in Python处的更多详细信息
如果您的原始代码无效,那么这也可能无效。