Ale*_*abu 2 python subprocess pywin32 python-3.x
我正在尝试使用子进程模块的'Popen'方法查询Windows服务的状态.但我得到了
TypeError:'Popen'对象不可调用
import subprocess, codecs
def serviceStatus(RadiaService):
status = []
cmd = 'sc query ' + RadiaService
pDetails = subprocess.Popen(cmd, shell = True, stdout = subprocess.PIPE)
for item in pDetails():
status.append(item)
finalStatus = b''.join(status).decode('utf-8')
print(finalStatus)
if __name__ == '__main__':
serviceStatus('RCA')
Run Code Online (Sandbox Code Playgroud)
错误跟踪:
Traceback (most recent call last):
File "C:\Alen\Cumulative RHF\Radia_Cumulative_Patch\cumulativeHotFixproject\lib\win32.py", line 39, in <module>
serviceStatus('RCA')
File "C:\Alen\Cumulative RHF\Radia_Cumulative_Patch\cumulativeHotFixproject\lib\win32.py", line 33, in serviceStatus
for item in pDetails():
TypeError: 'Popen' object is not callable
Run Code Online (Sandbox Code Playgroud)
看起来您希望收集子流程的标准输出.你将不得不使用pDetails.stdout
.这是一个帮助您入门的示例:
import subprocess
p = subprocess.Popen("ls -la", shell=True, stdout=subprocess.PIPE)
output = b''.join(p.stdout).decode('utf-8')
print(output)
Run Code Online (Sandbox Code Playgroud)
基于此,这是你的代码应该是这样的:
import subprocess, codecs
def serviceStatus(RadiaService):
cmd = 'sc query ' + RadiaService
pDetails = subprocess.Popen(cmd, shell = True, stdout = subprocess.PIPE)
return b''.join(pDetails.stdout).decode('utf-8')
def main():
print(serviceStatus('RCA'))
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
注意:您不必在列表中收集输出,您可以直接提供迭代来加入.如果你需要一个列表,你仍然不必使用for循环,你可以写status = list(pDetails.stdout)
.
归档时间: |
|
查看次数: |
1494 次 |
最近记录: |