import subprocess
import re
def do_cmd(_cmd, timeouts=60, input_string=None):
print(r'do cmd:{} timeouts:{}'.format(_cmd, timeouts))
try:
if input_string is None:
with subprocess.Popen(_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as p:
stdout, stderr = p.communicate(timeout=timeouts)
# print(stdout)
else:
with subprocess.Popen(_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
stdin=subprocess.PIPE) as p:
print(r'cmd with input {}'.format(input_string))
stdout, stderr = p.communicate(timeout=timeouts, input=input_string.encode())
print(r'end : pid:{} - {}'.format(p.pid, p.returncode))
return p.returncode, stdout.decode(), stderr.decode()
except subprocess.TimeoutExpired:
print(r'{} command execution timeouts'.format(_cmd))
raise
def is_pv_device(device_name):
# device_name : /dev/sdb
returncode, stdout, stderr = do_cmd('pvs')
for stdout_line in stdout.split('\n'):
stdout_line = stdout_line.strip()
if stdout_line != ''and device_name == stdout_line.split(' ')[0]:
return True
else:
return False
print(is_pv_device('/dev/sda3'))
xshell模拟Linux环境下python执行结果:
(模拟linux下输入pvs)
实际Linux下输入pvs的返回,(只有linux下有,mac和windows不可以)