读取命令行输出Python

读取命令行输出Python,python,output,Python,Output,我有一个问题,我使用python发出一个命令,然后接收值来创建一个服务列表 serviceList = subprocess.Popen(command, shell=True, stdout =subprocess.PIPE).stdout.read() print serviceList command是一个有效的命令,当我将其复制并粘贴到cmd中时,它可以完美地工作,为我提供服务及其状态的列表 如果我运行这个命令,它将不返回任何内容。当我打印出serviceList时,它是空的 我正在

我有一个问题,我使用python发出一个命令,然后接收值来创建一个服务列表

serviceList = subprocess.Popen(command, shell=True, stdout =subprocess.PIPE).stdout.read()

print serviceList
command
是一个有效的命令,当我将其复制并粘贴到cmd中时,它可以完美地工作,为我提供服务及其状态的列表

如果我运行这个命令,它将不返回任何内容。当我打印出serviceList时,它是空的


我正在使用Python2.7来保存标准输出,在代码中添加
output=serviceList.stdout.readlines()

要保存标准输出,在代码中添加
output=serviceList.stdout.readlines()

要保存标准输出,请添加
output=serviceList.stdout.readlines()
到您的代码中。

要保存标准输出,请在代码中添加
output=serviceList.stdout.readlines()

如果程序只是打印出一组信息然后退出,读取输出的一种更简单的方法(由于缓冲区已满,它也无法死锁)是调用:

process = subprocess.Popen(command)  # only call shell=True if you *really need it
stdoutdata, stderrdata = process.communicate()  # blocks until process terminates

*使用外部输入调用shell=True会打开您的代码以防止shell注入攻击,应谨慎使用


如果程序只是打印出一组信息然后退出,那么读取输出的一种更简单的方法(由于缓冲区已满,它也无法死锁)是调用:

process = subprocess.Popen(command)  # only call shell=True if you *really need it
stdoutdata, stderrdata = process.communicate()  # blocks until process terminates

*使用外部输入调用shell=True会打开您的代码以防止shell注入攻击,应谨慎使用


如果程序只是打印出一组信息然后退出,那么读取输出的一种更简单的方法(由于缓冲区已满,它也无法死锁)是调用:

process = subprocess.Popen(command)  # only call shell=True if you *really need it
stdoutdata, stderrdata = process.communicate()  # blocks until process terminates

*使用外部输入调用shell=True会打开您的代码以防止shell注入攻击,应谨慎使用


如果程序只是打印出一组信息然后退出,那么读取输出的一种更简单的方法(由于缓冲区已满,它也无法死锁)是调用:

process = subprocess.Popen(command)  # only call shell=True if you *really need it
stdoutdata, stderrdata = process.communicate()  # blocks until process terminates

*使用外部输入调用shell=True会打开您的代码以防止shell注入攻击,应谨慎使用

您必须使用方法而不是
stdout.read()
来获取
serviceList
的值

甚至Python文档也推荐它

警告:使用
communicate()
而不是
.stdin.write
.stdout.read
.stderr.read
,以避免由于任何其他操作系统管道缓冲区填满并阻塞子进程而导致死锁

试试这个:

proc = subprocess.Popen(command, shell=True, stdout =subprocess.PIPE)
serviceList  = proc.communicate()[0]
print serviceList
communicate()
返回一个元组
(stdoutdata,stderdata)
。在这里,我将元组的第一个元素分配给
serviceList

您必须使用method而不是
stdout.read()
来获取
serviceList
的值

甚至Python文档也推荐它

警告:使用
communicate()
而不是
.stdin.write
.stdout.read
.stderr.read
,以避免由于任何其他操作系统管道缓冲区填满并阻塞子进程而导致死锁

试试这个:

proc = subprocess.Popen(command, shell=True, stdout =subprocess.PIPE)
serviceList  = proc.communicate()[0]
print serviceList
communicate()
返回一个元组
(stdoutdata,stderdata)
。在这里,我将元组的第一个元素分配给
serviceList

您必须使用method而不是
stdout.read()
来获取
serviceList
的值

甚至Python文档也推荐它

警告:使用
communicate()
而不是
.stdin.write
.stdout.read
.stderr.read
,以避免由于任何其他操作系统管道缓冲区填满并阻塞子进程而导致死锁

试试这个:

proc = subprocess.Popen(command, shell=True, stdout =subprocess.PIPE)
serviceList  = proc.communicate()[0]
print serviceList
communicate()
返回一个元组
(stdoutdata,stderdata)
。在这里,我将元组的第一个元素分配给
serviceList

您必须使用method而不是
stdout.read()
来获取
serviceList
的值

甚至Python文档也推荐它

警告:使用
communicate()
而不是
.stdin.write
.stdout.read
.stderr.read
,以避免由于任何其他操作系统管道缓冲区填满并阻塞子进程而导致死锁

试试这个:

proc = subprocess.Popen(command, shell=True, stdout =subprocess.PIPE)
serviceList  = proc.communicate()[0]
print serviceList

communicate()
返回一个元组
(stdoutdata,stderdata)
。在这里,我将元组的第一个元素分配给
serviceList

,还有子流程函数check\u output(),它阻止并以字节字符串的形式返回流程的输出。如果您想避免阻塞,可以创建一个函数来调用它,并将其用作新线程()的目标


还有一个子流程函数check_output(),它阻止并以字节字符串的形式返回流程的输出。如果您想避免阻塞,可以创建一个函数来调用它,并将其用作新线程()的目标


还有一个子流程函数check_output(),它阻止并以字节字符串的形式返回流程的输出。如果您想避免阻塞,可以创建一个函数来调用它,并将其用作新线程()的目标


还有一个子流程函数check_output(),它阻止并以字节字符串的形式返回流程的输出。如果您想避免阻塞,可以创建一个函数来调用它,并将其用作新线程()的目标



当你在python中输入这个时会发生什么?哦,对不起,我完全忘了把它放进去。它只给我一个空格,或者一个空列表try
print serviceList.communicate()
给我一个错误str对象没有属性communicate,我将用操作系统而不是子流程编辑来尝试这一点:仍然会出现相同的错误。我认为您需要为代码发布更多的上下文。当您在python中输入这一点时会发生什么?哦,对不起,我完全忘了将其输入。它只是给了我一个空白,或者一个空的lis