python 使用 quota cmd 子处理输出
python subprocess output with quota cmd
1我正在尝试通过 ssh 将配额命令的结果输入 python,我正在使用:
cmd = 'quota -gsl user1'
try:
output = subprocess.check_output(
cmd,
stderr=subprocess.STDOUT,
timeout=5,
shell=True,
universal_newlines=True
)
except subprocess.CalledProcessError as e:
exit()
如果 user1 在配额范围内并且 return类似于
,则此方法工作正常
Disk quotas for group user1 (gid 9999):
Filesystem space quota limit grace files quota limit grace
/dev/sda2 666M 10240M 12560M 1141 0 0
但如果用户超过配额,则不会return
Disk quotas for group user1 (gid 9999):
Filesystem space quota limit grace files quota limit grace
/dev/sda2 11000M* 10240M 12560M 1141 0 0
但 output
只有 False
。甚至当我使用 quota -q
时也是如此,其中 return 是一个更简单的输出,仅用于超过配额。我也用 quota -gslq 2>&1
尝试过,但没有用,我认为 stderr=subprocess.STDOUT,
应该已经解决了这个问题。那么为什么我无法获得超过配额用户的结果?
Quoth the manpage for quota
:
Diagnostics
If quota exits with a non-zero status, one or more filesystems are over quota.
您正在使用 check_output
,它结合了 check_call()
(当命令 returns 为非零状态时会出错)和 getoutput()
(不会t检查错误代码)。
您不妨使用 getstatusoutput()
shorthand:
status, output = subprocess.getstatusoutput("quota -gsl user1")
或者用你原来的调用拼写出来(如果超时很重要),
cmd = 'quota -gsl user1'
try:
output = subprocess.check_output(
cmd,
stderr=subprocess.STDOUT,
timeout=5,
shell=True,
universal_newlines=True
)
status = 0
except subprocess.CalledProcessError as e:
status = e.returncode
output = e.output
print(status, output)
1我正在尝试通过 ssh 将配额命令的结果输入 python,我正在使用:
cmd = 'quota -gsl user1'
try:
output = subprocess.check_output(
cmd,
stderr=subprocess.STDOUT,
timeout=5,
shell=True,
universal_newlines=True
)
except subprocess.CalledProcessError as e:
exit()
如果 user1 在配额范围内并且 return类似于
,则此方法工作正常Disk quotas for group user1 (gid 9999):
Filesystem space quota limit grace files quota limit grace
/dev/sda2 666M 10240M 12560M 1141 0 0
但如果用户超过配额,则不会return
Disk quotas for group user1 (gid 9999):
Filesystem space quota limit grace files quota limit grace
/dev/sda2 11000M* 10240M 12560M 1141 0 0
但 output
只有 False
。甚至当我使用 quota -q
时也是如此,其中 return 是一个更简单的输出,仅用于超过配额。我也用 quota -gslq 2>&1
尝试过,但没有用,我认为 stderr=subprocess.STDOUT,
应该已经解决了这个问题。那么为什么我无法获得超过配额用户的结果?
Quoth the manpage for quota
:
Diagnostics
If quota exits with a non-zero status, one or more filesystems are over quota.
您正在使用 check_output
,它结合了 check_call()
(当命令 returns 为非零状态时会出错)和 getoutput()
(不会t检查错误代码)。
您不妨使用 getstatusoutput()
shorthand:
status, output = subprocess.getstatusoutput("quota -gsl user1")
或者用你原来的调用拼写出来(如果超时很重要),
cmd = 'quota -gsl user1'
try:
output = subprocess.check_output(
cmd,
stderr=subprocess.STDOUT,
timeout=5,
shell=True,
universal_newlines=True
)
status = 0
except subprocess.CalledProcessError as e:
status = e.returncode
output = e.output
print(status, output)