如何在python3中使用子进程编写命令

时间:2018-07-31 23:10:30

标签: python-3.x postgresql

import subprocess
proc = subprocess.Popen(['systemctl', 'reload', 'postgresql-9.6.service'], stdout=subprocess.PIPE, shell=True)
(db_cmd, err) = proc.communicate()

print (db_cmd)

我正在尝试使用python 3运行systemctl reload postgresql-9.6.service,但我无法获得输出。我得到的输出如下:

重新加载:systemctl:找不到命令 b''

2 个答案:

答案 0 :(得分:1)

首先:阅读文档:Subprocess module Python 3。 您输错了导入语句:它应该是:“ import subprocess”。

使用sudo执行您编写的程序:sudo python /full/path/to/your/script

然后:如果您写db_cmd = proc.communicate()[0],则更Python化,因为以此方式,您仅创建要使用的变量。

最后,您的错误表明在处理systemctl命令时出现了问题。特别是它似乎缺少reload命令。尝试使用重新启动。

此外:此问题与How to use subprocess相同。

答案 1 :(得分:0)

没有称为process的模块。 您应该将'process'替换为'subprocess',您可能会像这样:

import subprocess
proc = subprocess.Popen(['systemctl', 'reload', 'postgresql-9.6.service'], stdout=subprocess.PIPE, shell=True)
(db_cmd, err) = proc.communicate()

print (db_cmd)

但我收到此错误:

'systemctl' is not recognized as an internal or external command,
operable program or batch file.

此错误表示没有名为“ systemctl”的命令,请尝试对其进行检查。

对不起,也许任何人都可以为您提供更多帮助,但是抱歉,我所知道的一切。